代码之家  ›  专栏  ›  技术社区  ›  György Andrasek

如何确定对象是否可以被Invoke()'d调用?

  •  0
  • György Andrasek  · 技术社区  · 15 年前

    public class Event<T>
    {
        public delegate void Handler<t>(t msg);
        private event Handler<T> E;
    
        public void connect(Delegate handler) {
            E += delegate(T msg) {
                object target = handler.Target;
    
                if (Invokable(target) {
                    target.BeginInvoke(handler, new object[] { msg });
                }
            };
    
        }
    
        public void emit(T msg) {
            if ( E != null ) {
                E(msg);
            }
        }
    
        private static bool Invokable(object o) {
                    // magic
        }
    }
    

    如何实施 Invokable() ,我还需要什么来编译这段代码?我所知道的另一个问题是 target.BeginInvoke 呼叫,因为目标是 object .

    1 回复  |  直到 15 年前
        1
  •  2
  •   chriszero    15 年前

    如果要调用System.Windows.Forms.Control

    static bool Invokable(object o) {
      bool res = false;
      if(o is System.Windows.Forms.Control) {
       res = ((System.Windows.Forms.Control)o).InvokeRequired;
     }
     return res;
    }