2010-06-18 21 views
0

考慮下面的類:如何找出對象是否可以Invoke()'d?

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

+0

什麼是'Invokable'方法應該告訴對象'O'(它是一個靜態方法,所以它不能訪問還要別的嗎)? – 2010-06-18 12:24:38

+0

你爲什麼重新創造代表? – Andrey 2010-06-18 12:25:06

+0

@Tomas:無論是否是表單,因爲那時我需要線程安全魔法。 – 2010-06-18 12:27:55

回答

2

如果要調用一個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; 
} 
相關問題