主线程开启WebSocket子线程,然后子线程在接收到数据之后需要将数据回传到主线程,由于数据处理其中的一些事项是要通过主线程才能操作的。
这样就引出了一个子线程怎么去通知主线程要做哪些事情呢?为了解决上面的问题我找了好的多资料,最后我发现了SynchronizationContext
对象。
这个对像的用处就是可以记录一个线程的上下文然后再子线程处理完之后,要用到主要程去操作的时候可以去Post
或者Send
一个事件支解决,这样就很方便。
class Client { private Thread m_workThread; private SynchronizationContext m_ThreadSynContext; public TestClient()//构造函数当然是主线程执行的 { m_ThreadSynContext= SynchronizationContext.Current; //在这里记录主线程的上下文 m_workThread= new Thread(new ThreadStart(DoWork));//创建一个新的线程 } private void OnConnected(object state)//由于是主线程的同步对象Post调用,这个是在主线程中执行的 { //这里就回到了主线程里面了 //做一些事情 } private void DoWork()//这个是workThread线程执行的 { //这儿做些事(连接什么的。。。) //这而干完了 m_ThreadSynContext.Post(new SendOrPostCallback(OnConnected), null);//通知主线程 } }
https://blog.csdn.net/qq_23127851/article/details/78270988