我正在.Net 2.0中构建一个非可视组件.该组件使用异步套接字(BeginReceive,EndReceive等).异步回调在运行时创建的工作线程的上下文中调用.组件用户不必担心多线程(这是主要目标,我想要的)
组件用户可以在任何线程中创建我的非可视组件(UI线程只是简单应用程序的通用线程.更严重的应用程序可以在任意工作线程中创建组件).组件触发事件,例如"SessionConnected"或"DataAvailable".
问题:由于Async Callbacks和其中引发的事件,事件处理程序在工作线程上下文中执行.我想使用一个中间层,它强制事件处理程序在首先创建组件的线程的上下文中执行.
示例代码(从异常处理等中删除...)
/// <summary>
/// Occurs when the connection is ended
/// </summary>
/// <param name="ar">The IAsyncResult to read the information from</param>
private void EndConnect(IAsyncResult ar)
{
// pass connection status with event
this.Socket.EndConnect(ar);
this.Stream = new NetworkStream(this.Socket);
// -- FIRE CONNECTED EVENT HERE --
// Setup Receive Callback
this.Receive();
}
/// <summary>
/// Occurs when data receive is done; when 0 bytes were received we can assume the connection was closed so we should disconnect …Run Code Online (Sandbox Code Playgroud)