Как мне узнать, может ли объект быть Invoke () 'd? - PullRequest
0 голосов
/ 18 июня 2010

Рассмотрим следующий класс:

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 Ответ

2 голосов
/ 18 июня 2010

Если вы хотите вызвать 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;
}
...