zoukankan      html  css  js  c++  java
  • C#中,子线程与主线程之间的通信是如何实现(转)

    注: 项目中按照这个方法调试成功;

    通常我们会有这种需求:
    一个支持慢速设备的处理类,如网络通信、串口通信、打印等
    此时经常需要将线程封装在类里面,让类支持异步处理,然后发布事件或者回调委托通知主线程
    因为类需要被封装好,对外线程是不可见的,同时类的内部也只有事件,并不涉及界面,此时Control的BeginInvoke已经无能为力了。此时我更钟情于SynchronizationContext对象,简单明了
    假设我设计一个类TestClient,有个Connected事件

    class TestClient     {         private Thread workThread;         private SynchronizationContext mainThreadSynContext;

            public TestClient()//构造函数当然是主线程执行的         {             mainThreadSynContext = SynchronizationContext.Current; //在这里记录主线程的上下文             workThread = new Thread(new ThreadStart(DoWork));//创建一个新的线程         }

            private void OnConnected(object state)//由于是主线程的同步对象Post调用,这个是在主线程中执行的         {             //这里就回到了主线程里面了             //做一些事情         }

            private void DoWork()//这个是workThread线程执行的         {             //这儿做些事(连接什么的。。。)

                //这而干完了

                mainThreadSynContext.Post(new SendOrPostCallback(OnConnected), null);//通知主线程         }     } --------------------- 作者:HonorDuan 来源:CSDN 原文:https://blog.csdn.net/qq_23127851/article/details/78270988 版权声明:本文为博主原创文章,转载请附上博文链接!

    https://bbs.csdn.net/topics/210063471

  • 相关阅读:
    Oracle和Mysql的安装
    JVM简析
    navicat and connection is being used
    【从今天开始好好学数据结构01】数组
    如何完全透析数据结构、算法这门课?
    深入理解java虚拟机系列初篇(一):为什么要学习JVM?
    动画 | 大学四年结束之前必须透彻的排序算法
    【java基础】程序员你真的理解反射机制吗?
    解惑真小白的苦恼 | 类的对象,对象引用,对象实例,引用变量
    程序员这十个java题你都会吗?
  • 原文地址:https://www.cnblogs.com/xihong2014/p/10927171.html
Copyright © 2011-2022 走看看