3
主要AppDomain中有一些孩子的AppDomain。在子AppDomain中可能是UnhandledException。 如何通過UnhandledException在孩子的AppDomain卸載子的AppDomain。如何通過UnhandledException卸載的AppDomain
主要AppDomain中有一些孩子的AppDomain。在子AppDomain中可能是UnhandledException。 如何通過UnhandledException在孩子的AppDomain卸載子的AppDomain。如何通過UnhandledException卸載的AppDomain
這可以通過try ... finally ...
來完成,而無需註冊一個UnhandledException事件處理程序:
using System;
using System.Reflection;
interface IFoo
{
void DoGood();
void DoBad();
}
class Foo : MarshalByRefObject, IFoo
{
public void DoGood() { Console.WriteLine("I'm good (" + AppDomain.CurrentDomain.FriendlyName + ")"); }
public void DoBad() { throw new Exception("I'm bad (" + AppDomain.CurrentDomain.FriendlyName + ")"); }
}
class Program
{
public static void Main()
{
try
{
AppDomain domain = AppDomain.CreateDomain("FooDomain");
try
{
string assemblyName = Assembly.GetExecutingAssembly().FullName; // may be different assembly
string typeName = "Foo";
IFoo foo = (IFoo)domain.CreateInstanceAndUnwrap(assemblyName, typeName);
foo.DoGood();
foo.DoBad();
}
finally
{
AppDomain.Unload(domain);
}
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.Message);
}
}
}
的輸出是:
I'm good (FooDomain)
Error: I'm bad (FooDomain)
嘗試添加'C#'或'vb.net'標籤或任何您正在使用的語言來幫助改進您的問題的查看次數。 – LarsTech
你會更好試圖讓到UnhandledException –
的根從文檔在http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx它似乎這是一個非常雜亂的生意。具體而言,它不保證成功,可能會殺死一些線程而不是其他線程。除非孩子的AppDomain是非常簡單的和可預見的我不會建議此。 –