如何在AsyncCallback中安全地引发事件?

时间:2010-05-27 06:15:49

标签: c# events asynchronous synchronization delegates

我正在围绕TcpClient编写一个包装类,当数据到达时会引发一个事件。我正在使用BeginReadEndRead,但是当父表单处理事件时,它不在UI线程上运行。我需要使用委托并将上下文传递给回调吗?我认为回调是一种避免这种情况的方法......

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

1 个答案:

答案 0 :(得分:0)

父窗体应该在事件处理程序的控件上使用Invoke方法,以确保它在正确的线程上;您的后台进程的工作不符合UI的需求。 This msdn page有一个例子。