2016-11-22 58 views
0

我想从另一个装配在winform调用方法这样TargetInvocationException中的WinForms

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(); 
} 

但即时得到这个异常的调用线

类型的未处理的异常“System.Reflection.TargetInvocationException '发生在mscorlib.dll中

+1

什么是内部异常? –

+0

我没有写任何东西。 –

回答

1

TargetInvocationException可能会搞砸。有几种方法可以让你更轻松。

首先,你可以尝试使用Task,为了更好的异常处理[1]

和/或,你可以创建一个委托[2],并调用它,你会一个函数,而不是调用它。这会给你saveGame函数抛出的任何异常,而不是“调用失败”。创建委托的过程也可以揭示你想要调用的函数的其他问题,这是一个很好的学习练习。

[1] catch exception that is thrown in different thread

[2] https://msdn.microsoft.com/en-us/library/ms173176.aspx