Supose我有AppDomainA,它会旋转AppDomainB。 AppDomainB然后旋转AppDomainC。
如果在AppDomainA中我卸载AppDomainB,AppDomainC是否也会被卸载,或者我必须确保自己处理它?</ p>
答案 0 :(得分:1)
最好的方法是尝试一下。以下是创建AppDomainA的示例,该AppDomainA创建AppDomainB。我们告诉B做一些工作,并卸载A.
internal class Program
{
private static Timer _timer;
private static void Main(string[] args)
{
var domainA = AppDomain.CreateDomain("AppDomainA");
domainA.DomainUnload += (s, e) => Console.WriteLine("DomainA was unloaded.");
domainA.DoCallBack(() =>
{
var domainB = AppDomain.CreateDomain("AppDomainB");
domainB.DomainUnload += (s, e) => Console.WriteLine("DomainB was unloaded.");
domainB.DoCallBack(() =>
{
_timer = new Timer(o =>
{
Console.WriteLine("Tick from AppDomain: " + AppDomain.CurrentDomain.FriendlyName);
}, null, 0, 1000);
});
});
AppDomain.Unload(domainA);
Application.Run(); //Run a message loop so AppDomainB can keep doing work.
}
}
我们看到我们收到消息AppDomainA已卸载,但没有B,B继续工作。我们的结论是你需要确保自己处理这个问题。