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