3
メインAppDomainにはいくつかの子AppDomainsがあります。子のAppDomainにはUnhandledExceptionがあります。 子AppDomainで子AppDomainをUnhandledExceptionでアンロードする方法。UnhandledExceptionでAppDomainをアンロードする方法
メインAppDomainにはいくつかの子AppDomainsがあります。子のAppDomainにはUnhandledExceptionがあります。 子AppDomainで子AppDomainをUnhandledExceptionでアンロードする方法。UnhandledExceptionでAppDomainをアンロードする方法
これは、UnhandledExceptionイベントハンドラを登録することなく、try ... finally ...
によって行うことができます。
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);
}
}
}
出力は次のようになります。 `C#の`や `vb.net`タグまたは任意の追加
I'm good (FooDomain)
Error: I'm bad (FooDomain)
てみてくださいあなたの質問のビュー数を改善するために使用している言語。 – LarsTech
UnhandledExceptionのルートに到達しようとする方が良いでしょう。 –
http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspxのドキュメントから、これは非常に乱雑な営業。具体的には、成功するとは保証されておらず、スレッドを殺す可能性があります。子のAppDomainsが非常にシンプルで予測可能でない限り、私はこれに助言しません。 –