Исключение обмена сообщениями Windows Forms + CrossThread - PullRequest
0 голосов
/ 15 октября 2011

В моем проекте у меня есть класс "C1", где я постоянно слушаю клиентов, если какое-либо сообщение получено от клиента, тогда мне нужно обновить текстовое поле в классе формы. Я использую делегат для этого, созданного в классе "C1", и я использовал его в моей форме. В этой функции я обновляю свое текстовое поле.

Пожалуйста, помогите мне

1 Ответ

0 голосов
/ 15 октября 2011

Похоже, вам нужно использовать Invoke при назначении свойства Text вашего текстового поля, поскольку обновления элементов пользовательского интерфейса разрешены только из основного потока пользовательского интерфейса, и вы, вероятно, получаете сообщения связи TCP в другом потоке.

Вы можете сделать что-то вроде следующего:

private void UpdateText(string text)
{
   if (textBox1.InvokeRequired)
      textBox1.Invoke(new Action(() => UpdateText(text)));
   else
      textBox1.Text = text;                     
}

, который будет проверять, вызывается ли метод в потоке пользовательского интерфейса, и если нет, передавать запрос в поток пользовательского интерфейса перед обновлением текста.,Если вам нужно асинхронное поведение, вы можете использовать textBox1.BeginInvoke вместо textBox1.Invoke.

Для получения дополнительной информации см., Например, эту статью MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...