public void SynchronizationContext_Create() { // 获取当前线程的同步上下文 SynchronizationContext context = SynchronizationContext.Current; context.OperationStarted(); // 空方法, 在派生类中重写以响应操作 开始 执行的回调 context.OperationCompleted(); // 空方法, 在派生类中重写以响应操作 完成 执行的回调 var b = context.IsWaitNotificationRequired(); // 确定是否等待通知 // SendOrPostCallback - Action<object> - 表示在消息即将被调度到同步上下文时要调用的方法。 //context.Post((SendOrPostCallback)null, (object)null); // 在派生类中重写, 将异步消息分派到同步上下文 //context.Send((SendOrPostCallback)null, (object)null); //context.Wait((IntPtr[])null, waitAll: true, millisecondsTimeout: 1000); // 等待数组中的任意元素或所有元素接收信号 }
public void InvokeHandler(object sender, TEventArgs e) { if (_synchronizationContext == null || SynchronizationContext.Current == _synchronizationContext) { Handler(sender, e); } else { //Send or Post message on the SynchronizationContext if (_synchronizationContext.IsWaitNotificationRequired()) { _synchronizationContext.Post(InvokeHandlerOnContext, new InvokeHandlerOnContextState(Handler, sender, e)); } else { _synchronizationContext.Send(InvokeHandlerOnContext, new InvokeHandlerOnContextState(Handler, sender, e)); } } }