博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SynchronizationContext一篇
阅读量:5081 次
发布时间:2019-06-12

本文共 2042 字,大约阅读时间需要 6 分钟。

SynchronizationContext context; 最近写代码用到了这个,特别记录一下。

作用如下:

// 摘要:    //     提供在各种同步模型中传播同步上下文的基本功能。    public class SynchronizationContext    {    ......    }

来自using System.Threading;这个命名空间,一看很熟悉是线程的大类命名空间。

// 摘要:    //     获取当前线程的同步上下文。    //    // 返回结果:    //     一个 System.Threading.SynchronizationContext 对象,它表示当前同步上下文。    public static SynchronizationContext Current { get; }

我是在winform中使用,因为要线程之间同步,还有主线程绘图,之间用control.invoke,被大神鄙视,遂默默用起了大神推荐的SynchronizationContext。在Form初始化的时候context=SynchronizationContext.Current(实例化),

//        // 摘要:        //     当在派生类中重写时,将异步消息调度到一个同步上下文。        //        // 参数:        //   d:        //     要调用的 System.Threading.SendOrPostCallback 委托。        //        //   state:        //     传递给委托的对象。        public virtual void Post(SendOrPostCallback d, object state);        //        // 摘要:        //     当在派生类中重写时,将一个同步消息调度到一个同步上下文。        //        // 参数:        //   d:        //     要调用的 System.Threading.SendOrPostCallback 委托。        //        //   state:        //     传递给委托的对象。        //        // 异常:        //   System.NotSupportedException:        //     在 Windows Store 应用程序中调用的方法。用于 Windows Store 应用程序的 System.Threading.SynchronizationContext        //     的实现应用不支持 System.Threading.SynchronizationContext.Send(System.Threading.SendOrPostCallback,System.Object)        //     方法。        public virtual void Send(SendOrPostCallback d, object state);

上面的两个函数(方法)就是要用到的,一个是同步(阻塞),一个是异步(非阻塞),看自己的需要调用。其中SendOrPostCallback是一个委托,

// 摘要:    //     表示在消息即将被调度到同步上下文时要调用的方法。    //    // 参数:    //   state:    //     传递给委托的对象。    public delegate void SendOrPostCallback(object state);

使用如下(简单粗暴lambda):

context.Send(t =>            {                //操作            }, null);            context.Post(t =>            {                //操作            }, null);

state我写一个null,是传递给那个委托的参数,可以自己选择。我是在子线程中将一个参数传递给窗体(主线程,就是我在Form得到的当前线程上下文,如果是子线程与子线程之间交流,可以在线程内调用SynchronizationContext.Current获取),然后顶一个全部的变量互相使用请求。个人感觉是很好用,很有用。不会出现句柄未创建能不良的Exception抛出。

 

转载于:https://www.cnblogs.com/RainbowInTheSky/p/4887688.html

你可能感兴趣的文章
Linear Algebra lecture 2 note
查看>>
CRC计算模型
查看>>
Ajax之404,200等查询
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
OO设计的接口分隔原则
查看>>
数据库连接字符串大全 (转载)
查看>>
java类加载和对象初始化
查看>>
对于负载均衡的理解
查看>>
django简介
查看>>
window.event在IE和Firefox的异同
查看>>
常见的js算法面试题收集,es6实现
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Windows10 下Apache服务器搭建
查看>>
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>