主线程与子线程(或其他创建的多线程)通信 SynchronizationContext
被主线程创建的子线程需要通知主线程做其他操作。
SynchronizationContext可以记录一个子线程的上下文然后在线程处理完之后,要用到主线程去操作的时候可以去Post或者Send一个事件去解决。
class TestClient
{
private Thread workThread;
/// <summary>
/// 记录主线程的上下文
/// </summary>
private SynchronizationContext _mainThreadSynContext;
public TestClient()//构造函数当然是主线程执行的
{
_mainThreadSynContext= SynchronizationContext.Current; //在这里记录主线程的上下文
workThread = new Thread(new ThreadStart(DoWorkTask));//创建一个新的线程
}
private void OnConnected(object state)//由于是主线程的同步对象Post调用,这个是在主线程中执行的
{
//这里就回到了主线程里面了
//做一些事情
}
private Task DoWorkTask()//这个是workThread线程执行的线程
{
//这儿做些事(连接什么的。。。)
//这儿干完了
_mainThreadSynContext.Post(new SendOrPostCallback(OnConnected), null);//通知主线程
}
}