У меня есть серверное приложение, которое получает информацию по сети и обрабатывает ее. Сервер является многопоточным и одновременно обрабатывает несколько сокетов, а потоки создаются без моего контроля с помощью методов стиля BeginInvoke и EndInvoke, которые связаны соответствующими функциями обратного вызова.
Я пытаюсь создать форму в дополнение к основному графическому интерфейсу пользователя, которая отображает элемент ListBox, заполненный элементами, описывающими подключенные в данный момент сокеты. Итак, то, что я в основном пытаюсь сделать, - это добавить элемент в ListBox с помощью его функции Add () из потока, в котором выполняется соответствующая функция обратного вызова. Я получаю доступ к элементам управления формами через свойство Controls - I.E:
(ListBox)c.Controls["listBox1"].Items.Add();
Естественно, я не просто вызываю функцию, я пробовал несколько способов, которые нашел здесь и в Интернете, для связи между потоками, включая MethodInvoker
, используя delegate
в сочетании с Invoke()
, BeginInvoke()
и т. Д. Кажется, ничего не работает, Я всегда получаю одно и то же исключение, сообщающее мне, что к моему элементу управления обращались из потока, отличного от того, в котором он был создан.
Есть предположения?