[英]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。 然后你可以通過ID
或FriendlyName
或類似的東西來比較它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.