2012-07-24 35 views
1

我創建一個AppDomain和預訂事件UnhandledExceptionC#:AppDomain中UnhandledException錯誤

AppDomain sandbox1 = AppDomain.CreateDomain("SandBox1"); 
sandbox1.UnhandledException += 
    new UnhandledExceptionEventHandler(sandbox1_UnhandledException); 

當通過UnhandledException訂閱我的代碼的步驟,它在裝配提示出錯「類型「MainUI.MainWindowViewModel「MainUI ,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未標記爲可序列化。「

編輯: 所以我把序列化我MainWindowViewModel類,但仍然它沒有經歷過。當我運行應用程序相同的錯誤去「類型'MainUI.MainWindowViewModel'在程序集'MainUI,版本= 1.0.0.0,文化=中性,PublicKeyToken = null'未被標記爲可序列化。。請幫忙。謝謝

[SecurityPermission(SecurityAction.Demand, 
        Flags = SecurityPermissionFlag.AllFlags)] 
public class MainWindowViewModel : ViewModelBase 
{......} 

編輯

public MainWindowViewModel() 
{ 
    AppDomain current = AppDomain.CurrentDomain; 
    current.UnhandledException += 
     new UnhandledExceptionEventHandler(current_UnhandledException); 
} 

我的問題在這裏,如果我有2個孩子的AppDomain,我怎麼知道,這個例外是來自哪個孩子?

+0

「但它仍然沒有工作」 - 你有*相同*例外嗎?一個*不同*異常?或者屏幕變成粉紅色斑點的綠色?請定義「沒有工作」。它只是要求基類是'[Serializable]'?要麼...? – 2012-07-24 06:42:26

+0

請看我的編輯 – xscape 2012-07-24 06:48:18

+0

@xscape:我提供了你的答案。如果你不遵循它,你可能需要嘗試一下appdomains和remoting。起初相當困難,但知道的非常有價值。 – leppie 2012-07-24 07:04:03

回答

3

這絕對不是這樣做的方式。

您收到錯誤的原因是該類型正在嘗試跨越應用程序域邊界,並因此失敗,因爲它不是可序列化的或遠程對象。這也是你不希望發生的事情。

作爲一種解決方案,您應該在沙箱應用程序域中訂閱該事件。

在該處理程序中,您可以通過您選擇的某個遠程接口/服務將異常信息傳輸到「主」應用程序域。

+0

嗨Leppie,只是澄清,如果我得到它的權利UnhandledException事件必須訂閱我的currentdomain?請參閱我的編輯。我如何知道這個異常來自我的一個子域? – xscape 2012-07-24 07:51:20

相關問題