示例#1
0
 /// <summary>
 /// Позволяет произвести позднее связывание обработчика сигнала с сигналом
 /// </summary>
 /// <param name="smType">Тип обработчика сигнала</param>
 /// <param name="module">Экземпляр в котором находится обработчик</param>
 /// <param name="methodName">Обработчик сигнала</param>
 /// <param name="signal">Сигнал</param>
 public static void AppendMethod(SignalHandlerType smType, object module, string methodName, object signal)
 {
     Contract.Requires(module != null, "Не передан экземпляр класса");
     Contract.Requires(signal != null, "Не передан объект выступающий в роли сигнала");
     Contract.Requires(!String.IsNullOrWhiteSpace(methodName), "Не передано имя метода, обработчика сигнала");
     if (!Stopped)
     {
         var methods = module.GetType().GetMethods(BindingFlags.NonPublic |
                                                                 BindingFlags.FlattenHierarchy |
                                                                 BindingFlags.Instance |
                                                                 BindingFlags.Public |
                                                                 BindingFlags.Static);
         foreach (var method in methods.Where(m => m.Name.Equals(methodName)))
         {
             switch (smType)
             {
                 case SignalHandlerType.SignalHandler:
                     RegisterHandler(signal, module, method);
                     break;
                 case SignalHandlerType.SignalCompletedHandler:
                     RegisterCompletedHandler(signal, module, method);
                     break;
                 case SignalHandlerType.SignalExceptionHandler:
                     RegisterExceptionHandler(signal, module, method);
                     break;
             }
         }
     }
 }
示例#2
0
 /// <summary>
 /// Позволяет произвести позднее связывание обработчика сигнала с сигналом
 /// </summary>
 /// <param name="smType">Тип обработчика сигнала</param>
 /// <param name="handler">Делегат-обработчик</param>
 /// <param name="signal">Сигнал</param>
 public static void AppendMethod(SignalHandlerType smType, Delegate handler, object signal)
 {
     Contract.Requires(handler != null, "Не передан обработчик сигнала");
     Contract.Requires(signal != null, "Не передан объект выступающий в роли сигнала");
     if (!Stopped)
     {
         switch (smType)
         {
             case SignalHandlerType.SignalHandler:
                 RegisterHandler(signal, handler);
                 break;
             case SignalHandlerType.SignalCompletedHandler:
                 RegisterCompletedHandler(signal, handler);
                 break;
             case SignalHandlerType.SignalExceptionHandler:
                 RegisterExceptionHandler(signal, handler);
                 break;
         }
     }
 }
示例#3
0
 public static void RegisterAsHandler(this Delegate handler, SignalHandlerType handleType, object signalKey)
 {
     Signal.AppendMethod(handleType, handler, signalKey);
 }