我想在WinForm中调用另一个程序集的方法,就像这样
private void loadToolStripMenuItem_Click(object sender, EventArgs e){
Thread thread = new Thread(() =>
{
string assemblyPath = "PluginForSnake.dll";
AppDomain domain = AppDomain.CreateDomain("MyNewDomain");
ObjectHandle handle = domain.CreateInstanceFrom(assemblyPath, "PluginForSnake.Save");
object obj = handle.Unwrap();
MessageBox.Show("found");
if (RemotingServices.IsTransparentProxy(obj)){
Type type = obj.GetType();
object[] param = new object[] { _snake, _food };
MethodInfo saveGame = type.GetMethod("saveGame");
saveGame.Invoke(obj, param);
}
});
thread.IsBackground = true;
thread.Start();
}
但是我在Invoke行获得此异常
未处理的类型' System.Reflection.TargetInvocationException'发生在mscorlib.dll
答案 0 :(得分:1)
TargetInvocationException可以解决问题。有几种方法可以让您更轻松。
首先,您可以尝试使用Task
,以便更好地处理异常[1]
和/或,您可以创建一个委托[2]并像调用函数一样调用它,而不是调用它。这将为您提供saveGame
函数抛出的任何异常,而不是“调用失败”。创建委托的过程也可以揭示您尝试调用的函数的其他问题,并且是一个很好的学习练习。