C# SynchronizationContext以及Send和Post使用总结
2021-04-23 02:29
标签:hand 方法 示例 sync and space new manage tar 1、(SynchronizationContext)同步上下文的作用 SynchronizationContext其实就是实现线程之间通讯的。 2、创建(SynchronizationContext)同步上下文的方法 1)直接new创建一个SynchronizationContext同步上下文对象。 3、(SynchronizationContext)同步上下文的Send和Post方法 看了一些解释Send和Post方法,感觉弄得很复杂,我感觉其实简单来说, 1)Send方法就是同步调用,在当前线程上调用委托。 4、示例代码 1)(SynchronizationContext)同步上下文使用示例代码 2)使用AsyncOperation和AsyncOperationManager类示例代码 C# SynchronizationContext以及Send和Post使用总结 标签:hand 方法 示例 sync and space new manage tar 原文地址:https://www.cnblogs.com/MethodInvoke/p/14686110.html
2)winform程序通过SynchronizationContext.Current获取UI线程的同步上下文对象。
3)AsyncOperation和AsyncOperationManager类来操作同步上下文对象,不直接访问同步上下文对象(SynchronizationContext),推荐这程方法。
2)Post方法就是异步调用,在线程池中的线程调用委托。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);
}
}
}
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使用总结
文章链接:http://soscw.com/index.php/essay/78355.html