c#子线程与主线程之间通信

c#子线程与主线程之间通信

在做多线程传递消息是发生报错,查找到这个方法,可以使用。特此保存:
先说明一下,本人最近遇到了什么问题,就是在写写消息队列的时候,发现消息队列每次接收一个消息的时候都是创建了一个新的线程。

这样就导致了消息处理的时候没有在主线程上进行,然而其中的一些步事项是要通过主线程才能操作的。

这样就引出了一个子线程怎么去通知主线程要做哪些事情呢?为了解决上面的问题我找了好的多资料,好多都是用委托,去解决了,

然后我又看了我的项目通过这种beginInvoker的这种办法解决不是很好用。并不能解决的当前的问题,

在这个时候我发现了SynchronizationContext对象。这个对像的用处就是可以记录一个线程的上下文然后再子线程处理完之后,

要用到主要程去操作的时候可以去Post或者Send一个事件支解决,这样就很方便,代码如下:

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);//通知主线程
    }
}

————————————————
版权声明:本文为CSDN博主「HonorDuan」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/qq_23127851/article/details/78270988.

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值