Как я могу безопасно вызывать события в AsyncCallback? - PullRequest
0 голосов
/ 27 мая 2010

Я пишу класс-оболочку вокруг TcpClient, который вызывает событие при поступлении данных. Я использую BeginRead и EndRead, но когда родительская форма обрабатывает событие, она не выполняется в потоке пользовательского интерфейса. Мне нужно использовать делегатов и передать контекст в обратный вызов? Я думал, что обратные вызовы были способом избежать этого ...

void ReadCallback(IAsyncResult ar)
{
    int length = _tcpClient.GetStream().EndRead(ar);
    _stringBuilder.Append(ByteArrayToString(_buffer, length));
    BeginRead();
    OnStringArrival(EventArgs.Empty);
}

1 Ответ

0 голосов
/ 27 мая 2010

Родительская форма должна использовать метод Invoke в своих элементах управления в обработчике событий, чтобы убедиться, что она находится в нужном потоке; Это не работа вашего фонового процесса, чтобы соответствовать тому, что нужно пользовательскому интерфейсу. Эта страница MSDN имеет пример.

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