簡體   English   中英

如何檢查AppDomain是否已卸載?

[英]How to check if AppDomain is unloaded?

我通過代理在另一個AppDomain中使用了一堆對象。 它們位於一個單獨的域中,因為我需要熱交換包含這些對象的程序集,因此我在使用它托管的程序集完成后卸載了一個AppDomain。

我想有時檢查一下我是否已經卸載過去的AppDomain(或者它以某種方式單獨卸載)以進行測試。 有沒有辦法做到這一點?

顯而易見的方法是做一些會引發AppDomainUnloadedException事情,但我希望還有其他方法。

我相信你可以在一些給定的Dictionary<AppDomain, bool>中使用存儲AppDomain引用的組合,如果加載或卸載bool ,則處理AppDomain.DomainUnload事件。

Dictionary<AppDomain, bool> appDomainState = new Dictionary<AppDomain, bool>();

AppDomain appDomain = ...; // AppDomain creation
appDomain.DomainUnload += (sender, e) => appDomainState[appDomain] = false;
appDomainState.Add(appDomain, true);

這樣您就可以檢查是否卸載了AppDomain

// "false" is "unloaded"
if(!appDomainState[appDomainReference]) 
{
}

或者,您可以使用AppDomain.Id作為鍵:

Dictionary<int, bool> appDomainState = new Dictionary<int, bool>();

AppDomain appDomain = ...; // AppDomain creation
appDomain.DomainUnload += (sender, e) => appDomainState[appDomain.Id] = false;
appDomainState.Add(appDomain.Id, true);

...而if語句如下所示:

// "false" is "unloaded"
if(!appDomainState[someAppDomainId]) 
{
}

您可以使用此stackoverflow鏈接中的代碼列出程序中的所有appdomains。 然后你可以通過IDFriendlyName或類似的東西來比較它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM