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

  • 相关阅读:
    how to pass a Javabean to server In Model2 architecture.
    What is the Web Appliation Archive, abbreviation is "WAR"
    Understaning Javascript OO
    Genetic Fraud
    poj 3211 Washing Clothes
    poj 2385 Apple Catching
    Magic Star
    关于memset的用法几点
    c++ 函数
    zoj 2972 Hurdles of 110m
  • 原文地址:https://www.cnblogs.com/xihong2014/p/10927171.html
Copyright © 2011-2022 走看看