我正在编写一个大量使用线程的类库,我想将线程安全带入库中,而不是让我们的代码必须自己实现线程安全的开发人员。
我有一个活动
public delegate void OnPostHandler();
public event OnPostHandler OnPost;
和一个方法
public void FireEvent() {
Delegate[] delegate_list = OnPost.GetInvocationList();
foreach (OnPostHandler d in delegate_list)
{
//detect if d.Target is a System.Windows.Forms.Control
Type formType = Type.GetType("System.Windows.Forms.Control, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
if(formType != null) {
//need to cast d.Target to System.Windows.Forms.Control WITHOUT referencing System.Windows.Forms.Control
if(d.Target.InvokeRequired) {
d.Target.Invoke(d);
} else {
d();
}
} else {
d();
}
}
}
在FireEvent
,我想转换d.Target
为 aSystem.Windows.Forms.Control
而System.Windows.Forms.Control
不是代码中的指定转换,如果可能的话,我希望这样做,formType
这样我就不会被迫自己链接表单程序集,因为它不是库的要求,并且不应该是。
或者,有没有更好的方法来做我想做的事情?