예제 #1
0
    private static Action <object> GetRegAction(EventHandlerType type)
    {
        Action <object> act = null;

        dic.TryGetValue(type, out act);
        return(act);
    }
    public static Task <ReturnType> MethodNameTaskAsync(this NNNNService service, A a)
    {
        if (service == null)
        {
            throw new NullReferenceException();
        }


        var tcs = new TaskCompletionSource <ReturnType>();

        EventHandlerType handler = null;

        handler = (s, o) =>
        {
            service.MethodNameCompleted -= handler;
            tcs.TrySetCompleted(o.Result);
        };

        service.MethodNameCompleted += handler;
        try
        {
            service.MethodNameAsync();
        }
        catch
        {
            service.MethodNameCompleted -= handler;
            throw;
        }

        return(tcs.Task);
    }
 public override string ToString()
 {
     return(new System.Text.StringBuilder(EventHandlerType.ToString())
            .Append(' ')
            .Append(Name)
            .ToString());
 }
        private static MethodBuilder EmitNotifyPropertyChanged(TypeBuilder typeBuilder, FieldBuilder eventFieldBuilder)
        {
            var methodBuilder = typeBuilder.DefineMethod("NotifyPropertyChanged", DefaultMethodAttributes, null, new Type[] { typeof(PropertyChangedEventArgs) });

            var methodIl = methodBuilder.GetILGenerator();

            var labelExit = methodIl.DefineLabel();

            // if (PropertyChanged == null)
            // {
            //      return;
            // }
            methodIl.Emit(OpCodes.Ldarg_0);
            methodIl.Emit(OpCodes.Ldfld, eventFieldBuilder);
            methodIl.Emit(OpCodes.Ldnull);
            methodIl.Emit(OpCodes.Ceq);
            methodIl.Emit(OpCodes.Brtrue, labelExit);

            // this.PropertyChanged(this,PropertyChangedEventArgs);
            methodIl.Emit(OpCodes.Ldarg_0);
            methodIl.Emit(OpCodes.Ldfld, eventFieldBuilder);
            methodIl.Emit(OpCodes.Ldarg_0);
            methodIl.Emit(OpCodes.Ldarg_1);
            methodIl.EmitCall(OpCodes.Callvirt, EventHandlerType.GetMethod("Invoke"), null);

            // return;
            methodIl.MarkLabel(labelExit);
            methodIl.Emit(OpCodes.Ret);

            return(methodBuilder);
        }
예제 #5
0
    public static void RegisterEvnet(EventHandlerType type, Action <object> action)
    {
        Action <object> act = GetRegAction(type);

        act      += action;
        dic[type] = act;
    }
예제 #6
0
    public static void ExcuteEvent(EventHandlerType type, object obj)
    {
        Action <object> act = GetRegAction(type);

        if (act != null)
        {
            act(obj);
        }
    }
예제 #7
0
 public void AddHandler(EventHandlerType type, beRemoteBaseEventListener handler)
 {
     switch (type)
     {
     case EventHandlerType.ConnectionStateChanged:
         _connectionStateChangedEvent += new ConnectionStateChangedEventHandler(handler.DoWork);
         break;
     }
 }
예제 #8
0
    public static void UnRegisterEvent(EventHandlerType type, Action <object> action)
    {
        Action <object> act = GetRegAction(type);

        if (act != null)
        {
            act      -= action;
            dic[type] = act;
        }
    }
예제 #9
0
 public void OnEvent(EventHandlerType type, beRemoteEventArgs e)
 {
     switch (type)
     {
     case EventHandlerType.ConnectionStateChanged:
         if (_connectionStateChangedEvent != null)
         {
             _connectionStateChangedEvent(new object(), (ConnectionStateChangedEventArgs)e);
         }
         break;
     }
 }
        public List <ParameterClass> GetParameters(IMethod method)
        {
            List <ParameterClass> pcs = new List <ParameterClass>();

            if (EventHandlerType.IsLibType)
            {
                ParameterInfo[] pifs = null;
                MethodInfo      mif  = EventHandlerType.LibTypePointer.ClassType.GetMethod("Invoke");
                pifs = mif.GetParameters();
                if (pifs != null && pifs.Length > 0)
                {
                    for (int i = 0; i < pifs.Length; i++)
                    {
                        if (pifs[i].ParameterType.IsGenericParameter)
                        {
                            DataTypePointer dt = EventHandlerType.GetConcreteType(pifs[i].ParameterType);
                            if (dt != null)
                            {
                                pcs.Add(new ParameterClass(dt.BaseClassType, pifs[i].Name, this, new MethodInfoPointer(mif)));
                                continue;
                            }
                        }
                        pcs.Add(new ParameterClass(pifs[i].ParameterType, pifs[i].Name, this, new MethodInfoPointer(mif)));
                    }
                }
            }
            else
            {
                //use custom delegate type, it is a list of parameters
                if (EventHandlerType.ClassTypePointer == null)
                {
                    throw new DesignerException("Custom event handler type cannot be null");
                }
                CustomEventHandlerType ceht = EventHandlerType.ClassTypePointer as CustomEventHandlerType;
                if (ceht == null)
                {
                    throw new DesignerException("Invalid custom event handler type: {0}", EventHandlerType.ClassTypePointer.GetType().Name);
                }
                if (ceht.Parameters != null)
                {
                    foreach (NamedDataType ndt in ceht.Parameters)
                    {
                        pcs.Add(new ParameterClass(ndt.BaseClassType, ndt.Name, method));
                    }
                }
            }
            return(pcs);
        }
예제 #11
0
        /// <summary>
        /// 绑定事件.
        /// </summary>
        /// <typeparam name="A">事件的 EventArgs 类型.</typeparam>
        /// <param name="target">将绑定的目标实例, 如果绑定静态事件, 可以为 null.</param>
        /// <param name="type">如果绑定静态事件, 可以指定类型.</param>
        /// <param name="eventName">事件的名称.</param>
        /// <param name="eventType">事件的类型.</param>
        /// <param name="handler">委托, 在事件触发时执行.</param>
        public void BindEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, Action <object, A> handler)
            where A : EventArgs
        {
            if (null == handler)
            {
                return;
            }

            EventInfo eventInfo = this.getEventInfo(target, type, eventName);

            if (null == eventInfo)
            {
                return;
            }

            Delegate eventHandler;

            try
            {
                // TODO: (自定义) 当修改 EventHandlerType 时, 请在下面的 switch 中生成对应的事件.
                switch (eventType)
                {
                case EventHandlerType.KeyEventHandler:
                    eventHandler = new KeyEventHandler(handler as Action <object, KeyEventArgs>);
                    break;

                case EventHandlerType.KeyPressEventHandler:
                    eventHandler = new KeyPressEventHandler(handler as Action <object, KeyPressEventArgs>);
                    break;

                case EventHandlerType.MouseEventHandler:
                    eventHandler = new MouseEventHandler(handler as Action <object, MouseEventArgs>);
                    break;

                case EventHandlerType.EventHandler:
                default:
                    eventHandler = new EventHandler(handler as Action <object, EventArgs>);
                    break;
                }

                eventInfo.AddEventHandler(target, eventHandler);
            }
            catch { }
        }
예제 #12
0
파일: EventInfo.cs 프로젝트: ForNeVeR/pnet
        public void AddEventHandler(Object target, Delegate handler)
        {
            MethodInfo add = GetAddMethod(true);

            if (add == null)
            {
                throw new MemberAccessException
                          (_("Reflection_NoEventAdd"));
            }
            if (handler == null ||
                !EventHandlerType.IsAssignableFrom(handler.GetType()))
            {
                throw new ArgumentException
                          (_("Reflection_InvalidEventHandler"));
            }
            Object[] parameters = new Object [1];
            parameters[0] = handler;
            add.Invoke(target, parameters);
        }
예제 #13
0
        protected void bindPagerEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, string tableName, PagerActionType actionType) where A : EventArgs
        {
#if V3_5 || V4
            this.BindEvent <A> (target, type, eventName, eventType,
                                delegate(object sender, A e)
            {
                if (!string.IsNullOrEmpty(tableName) && this.tableSettings.ContainsKey(tableName))
                {
                    this.setPager(this.tableSettings[tableName], actionType, this.window.GetPagerIndex(this.tableSettings[tableName]));
                }
            }
                                );
#else
            this.BindEvent <A> (target, type, eventName, eventType, null);
#endif
        }
예제 #14
0
 public override string ToString()
 {
     return(EventHandlerType.ToString() + " " + Name);
 }
예제 #15
0
        protected void bindSetIsRowCheckedEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, string tableName, bool?isChecked, string viewFilter) where A : EventArgs
        {
#if V3_5 || V4
            this.BindEvent <A> (target, type, eventName, eventType,
                                delegate(object sender, A e)
            {
                if (!string.IsNullOrEmpty(tableName) && this.tableSettings.ContainsKey(tableName))
                {
                    this.setIsRowChecked(this.tableSettings[tableName], isChecked, viewFilter);
                }
            }
                                );
#else
            this.BindEvent <A> (target, type, eventName, eventType, null);
#endif
        }
예제 #16
0
 /// <summary>
 /// 绑定可以触发分页相关操作的事件, 比如: Button 的 Click 事件.
 /// </summary>
 /// <typeparam name="A">事件的参数类型, 必须从 EventArgs 派生.</typeparam>
 /// <param name="target">目标实例, 比如: 窗口上的 Button.</param>
 /// <param name="eventName">事件名称, 比如: "Click".</param>
 /// <param name="eventType">事件的类型, 比如: EventHandler.</param>
 /// <param name="tableName">表格的名称, 与 TableSetting 的 Name 一致.</param>
 /// <param name="actionType">分页操作类型.</param>
 public void BindPagerEvent <A> (object target, string eventName, EventHandlerType eventType, string tableName, PagerActionType actionType) where A : EventArgs
 {
     this.bindPagerEvent <A> (target, null, eventName, eventType, tableName, actionType);
 }
예제 #17
0
        /// <summary>
        /// 绑定可以触发设置行选中状态的事件, 比如: Button 的 Click 事件.
        /// </summary>
        /// <typeparam name="A">事件的参数类型, 必须从 EventArgs 派生.</typeparam>
        /// <param name="target">目标实例, 比如: 窗口上的 Button.</param>
        /// <param name="eventName">事件名称, 比如: "Click".</param>
        /// <param name="eventType">事件的类型, 比如: EventHandler.</param>
        /// <param name="tableName">表格的名称, 与 TableSetting 的 Name 一致.</param>
        /// <param name="isChecked">行是否被选中, 可以为 null, 则取反.</param>
        /// <param name="viewFilter">过滤条件, 只有符合条件的行才会设置选中状态, 可以为 null, 则使用 IWindow 提供的条件.</param>
        public void BindSetIsRowCheckedEvent <A> (object target, string eventName, EventHandlerType eventType, string tableName, bool?isChecked, string viewFilter) where A : EventArgs
#endif
        {
            this.bindSetIsRowCheckedEvent <A> (target, null, eventName, eventType, tableName, isChecked, viewFilter);
        }
예제 #18
0
 /// <summary>
 /// 绑定可以触发设置行选中状态的事件, 比如: Button 的 Click 事件.
 /// </summary>
 /// <typeparam name="A">事件的参数类型, 必须从 EventArgs 派生.</typeparam>
 /// <param name="target">目标实例, 比如: 窗口上的 Button.</param>
 /// <param name="eventName">事件名称, 比如: "Click".</param>
 /// <param name="eventType">事件的类型, 比如: EventHandler.</param>
 /// <param name="tableName">表格的名称, 与 TableSetting 的 Name 一致.</param>
 /// <param name="isChecked">行是否被选中, 可以为 null, 则取反.</param>
 /// <param name="viewFilter">过滤条件, 只有符合条件的行才会设置选中状态, 可以为 null, 则使用 IWindow 提供的条件, 默认为 null.</param>
 public void BindSetIsRowCheckedEvent <A> (object target, string eventName, EventHandlerType eventType, string tableName, bool?isChecked, string viewFilter = null) where A : EventArgs
예제 #19
0
        protected void bindDataEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, DataActionType actionType, params string[] tableNames) where A : EventArgs
        {
#if V3_5 || V4
            this.BindEvent <A> (target, type, eventName, eventType,
                                delegate(object sender, A e)
            {
                if (null == tableNames)
                {
                    return;
                }

                List <TableSetting <P> > tableSettings = new List <TableSetting <P> > ( );

                foreach (string tableName in tableNames)
                {
                    if (!string.IsNullOrEmpty(tableName) && this.tableSettings.ContainsKey(tableName))
                    {
                        TableSetting <P> tableSetting = this.tableSettings[tableName];
                        tableSetting.FilterRows.Clear( );
                        tableSetting.FilterAddedRows.Clear( );
                        tableSetting.FilterDeletedRows.Clear( );
                        tableSetting.FilterModifiedRows.Clear( );
                        tableSetting.AddedRows.Clear( );
                        tableSetting.DeletedRows.Clear( );
                        tableSetting.ModifiedRows.Clear( );

                        foreach (DataRowView rowView in this.getView(tableSetting, null, true))
                        {
                            tableSetting.FilterRows.Add(rowView.Row);

                            switch (rowView.Row.RowState)
                            {
                            case DataRowState.Added:
                                tableSetting.FilterAddedRows.Add(rowView.Row);
                                break;

                            case DataRowState.Deleted:
                                tableSetting.FilterDeletedRows.Add(rowView.Row);
                                break;

                            case DataRowState.Modified:
                                tableSetting.FilterModifiedRows.Add(rowView.Row);
                                break;
                            }
                        }

                        foreach (DataRow row in tableSetting.Table.Rows)
                        {
                            switch (row.RowState)
                            {
                            case DataRowState.Added:
                                tableSetting.AddedRows.Add(row);
                                break;

                            case DataRowState.Deleted:
                                tableSetting.DeletedRows.Add(row);
                                break;

                            case DataRowState.Modified:
                                tableSetting.ModifiedRows.Add(row);
                                break;
                            }
                        }

                        tableSettings.Add(tableSetting);
                    }
                }

                switch (actionType)
                {
                case DataActionType.Fill:
                    this.fillData(tableSettings.ToArray( ));
                    break;

                case DataActionType.Add:
                    this.addData(tableSettings.ToArray( ));
                    break;

                case DataActionType.Delete:
                    this.deleteData(tableSettings.ToArray( ));
                    break;

                case DataActionType.Modify:
                    this.modifyData(tableSettings.ToArray( ));
                    break;

                case DataActionType.Update:
                    this.updateData(tableSettings.ToArray( ));
                    break;
                }

                foreach (TableSetting <P> tableSetting in tableSettings)
                {
                    this.dataCompleted(tableSetting, actionType);
                }
            }
                                );
#else
            this.BindEvent <A> (target, type, eventName, eventType, null);
#endif
        }
예제 #20
0
 /// <summary>
 /// 绑定可以触发 DataTable 数据事件, 比如: Button 的 Click 事件, 当按钮被点击时, 填充 DataTable.
 /// </summary>
 /// <typeparam name="A">事件的参数类型, 必须从 EventArgs 派生.</typeparam>
 /// <param name="target">目标实例, 比如: 窗口上的 Button.</param>
 /// <param name="eventName">事件名称, 比如: "Click".</param>
 /// <param name="eventType">事件的类型, 比如: EventHandler.</param>
 /// <param name="actionType">行为的类型.</param>
 /// <param name="tableNames">表格的名称, 与 TableSetting 的 Name 一致.</param>
 public void BindDataEvent <A> (object target, string eventName, EventHandlerType eventType, DataActionType actionType, params string[] tableNames) where A : EventArgs
 {
     this.bindDataEvent <A> (target, null, eventName, eventType, actionType, tableNames);
 }
예제 #21
0
 /// <summary>
 /// 绑定事件.
 /// </summary>
 /// <typeparam name="A">事件的 EventArgs 类型.</typeparam>
 /// <param name="target">将绑定的目标实例, 如果绑定静态事件, 可以为 null.</param>
 /// <param name="type">如果绑定静态事件, 可以指定类型.</param>
 /// <param name="eventName">事件的名称.</param>
 /// <param name="eventType">事件的类型.</param>
 /// <param name="handler">委托, 在事件触发时执行.</param>
 public void BindEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, Delegate handler)
     where A : EventArgs
 {
     throw new NotImplementedException(".NET 3.5 以下版本中方法尚未实现, 请切定义 V3_5 或者 V4, 并换到 3.5 或者 4 版本");
 }
 /// <summary>
 ///     Set Event Handlers Type to Work Chat System with it
 /// </summary>
 /// <param name="handlerType">Type of Event Handler You Want to Set</param>
 public static void SetEventHandlersType(EventHandlerType handlerType)
 {
     HandlerType = handlerType;
 }
예제 #23
0
            // 创建绑定弹出消息的方法
            public void BindPopMessageEvent <A> (object target, Type type, string eventName, EventHandlerType eventType, string message)
                where A : EventArgs
            {
#if V3_5 || V4
                this.BindEvent <A> (target, type, eventName, eventType,
                                    delegate(object sender, A e)
                                    { MessageBox.Show(message); }
                                    );
#endif
            }