标签:hand 方法 示例 sync and space new manage tar
1、(SynchronizationContext)同步上下文的作用
SynchronizationContext其实就是实现线程之间通讯的。
2、创建(SynchronizationContext)同步上下文的方法
1)直接new创建一个SynchronizationContext同步上下文对象。
2)winform程序通过SynchronizationContext.Current获取UI线程的同步上下文对象。
3)AsyncOperation和AsyncOperationManager类来操作同步上下文对象,不直接访问同步上下文对象(SynchronizationContext),推荐这程方法。
3、(SynchronizationContext)同步上下文的Send和Post方法
看了一些解释Send和Post方法,感觉弄得很复杂,我感觉其实简单来说,
1)Send方法就是同步调用,在当前线程上调用委托。
2)Post方法就是异步调用,在线程池中的线程调用委托。
4、示例代码
1)(SynchronizationContext)同步上下文使用示例代码
using System; using System.Threading; namespace SynchronizationContextExample { public class MySynchronizedClass { private Thread workerThread; private SynchronizationContext context; public event EventHandler SomethingHappened; public MySynchronizedClass() { //获取当前SynchronizationContext非常重要对象在构造函数中。我们想要的 //属于线程的SynchronizationContext对象 //这个对象正在被创建。 //context= SynchronizationContext.Current;当前线程可能没有SynchronizationContext对象;该线程尚未为设置SynchronizationContext对象。 //如果是这样,我们可以通过创建SynchronizationContext来简化 if(context == null) { context = new SynchronizationContext(); } workerThread = new Thread(new ThreadStart(DoWork)); workerThread.Start(); } private void DoWork() { context.Post(new SendOrPostCallback(delegate(object state) { EventHandler handler = SomethingHappened; if(handler != null) { handler(this, EventArgs.Empty); } }), null); } } }
2)使用AsyncOperation和AsyncOperationManager类示例代码
using System; using System.Threading; using System.ComponentModel; namespace SynchronizationContextExample { public class MySynchronizedClass { private Thread workerThread; private AsyncOperation operation; public event EventHandler SomethingHappened; public MySynchronizedClass() { operation = AsyncOperationManager.CreateOperation(null); workerThread = new Thread(new ThreadStart(DoWork)); workerThread.Start(); } private void DoWork() { operation.Post(new SendOrPostCallback(delegate(object state) { EventHandler handler = SomethingHappened; if(handler != null) { handler(this, EventArgs.Empty); } }), null); operation.OperationCompleted(); } } }
C# SynchronizationContext以及Send和Post使用总结
标签:hand 方法 示例 sync and space new manage tar
原文地址:https://www.cnblogs.com/MethodInvoke/p/14686110.html