我正在尝试将来自不同程序集的委托分配给已从同一程序集加载的对象,这很有趣。
loader.LoadedGestures 是一个 object[] - 其中的每个对象都来自不同的 .dll。我希望该数组中的所有对象都能够触发 GestureDetected,定义如下。
public class Foo
{
private void Initialise_Gestures()
{
loader = new GestureLoader();
loader.LoadGestures(); // load all the Gestures into the array
for (int i = 0; i < loader.LoadedGestures.Length; i++)
{
if (loader.LoadedGestures[i] != null)
{
EventInfo ev = loader.LoadedGestures[i].GetType().GetEvent("GestureDetected");
Type del = ev.EventHandlerType;
MethodInfo mi = this.GetType().GetMethod("GestureDetected", BindingFlags.NonPublic | BindingFlags.Instance);
Delegate d = Delegate.CreateDelegate(del, this, mi); // <- "Error binding to target method."
ev.AddEventHandler(loader.LoadedGestures[i], d);
}
}
}
private void GestureDetected(object sender, GestureEventArgs e)
{
// do stuff
}
}
问题是 GestureEventArgs 和 GestureEventHandler 是在每个 .dll 中定义的,否则它们将无法编译。我试图将 GestureEventHandler 附加为在主类的程序集中创建的对象,但它抱怨在不同的程序集中有两个相同的对象类型......
任何帮助,将不胜感激。