C # ошибка операции потока - PullRequest
3 голосов
/ 29 марта 2009

В программе c # для имитации сетевого мессенджера у меня есть функция обратного вызова для beginreceive, где мне нужно отобразить текст, полученный в определенном текстовом поле. this.textBox1.Text = sb.ToString (); Тем не менее при этом я получаю операцию перекрестного потока не допустимая ошибка. Я понимаю, что мне нужно использовать метод object.invoke, но не могли бы вы предоставить мне полный код для вызова делегата, потому что я все еще наивен, когда дело доходит до многопоточности.

Ответы [ 2 ]

8 голосов
/ 29 марта 2009

Вам нужно перенести работу обратно на интерфейс пользователя; к счастью, это просто:

this.Invoke((MethodInvoker) delegate {
    this.textBox1.Text = sb.ToString();
});

Здесь используются функции "анонимного метода" и "захваченных переменных" в C # для выполнения всех тяжелых работ. В .NET 3.5 вы можете предпочесть использовать Action, но это не имеет большого значения:

this.Invoke((Action) delegate {
    this.textBox1.Text = sb.ToString();
});
3 голосов
/ 29 марта 2009

Вы можете использовать его следующим образом:

void MyCallback(IAsyncResult result)
{
if (textBox1.InvokeRequired) {
    textBox1.Invoke(new Action<IAsyncResult>(MyCallBack),new object[]{result});
    return;
}
// your logic here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...