考虑以下课程:
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 :(得分: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;
}