示例#1
0
        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);	// 等待数组中的任意元素或所有元素接收信号
        }
示例#2
0
 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));
         }
     }
 }