2016-11-22 38 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

相關問題