主线程与子线程(或其他创建的多线程)通信 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);//通知主线程
        }
    }
posted @ 2019-12-31 17:54  wesson2019  阅读(293)  评论(0编辑  收藏  举报