2007年01月06日

AppDomainでのデリゲート

   このエントリーをはてなブックマークに追加 Clip to Evernote
AppDomainの動作を調べるために、以下のようなコードを書いてみた。
別AppDoaminのメソッドを呼び出す際に、Delegateを引数に渡し、
呼び出されたAppDomainのメソッドから、そのDelegateを呼び出すというもの。

public static void Main() {
Console.WriteLine(AppDomain.CurrentDomain.GetHashCode().ToString());

AppDomain domain = AppDomain.CreateDomain("DomainB",
null,
(AppDomainSetup)null);
ObjectHandle oh = domain.CreateInstance("GushwellAssembly", "Gushwell.MyType");

MyType testObj = (MyType)oh.Unwrap();
testObj.Execute(CallBackMethod);
}

public static void CallBackMethod() {
Console.WriteLine(AppDomain.CurrentDomain.GetHashCode().ToString());
}


public delegate void AppDomainDelegate();

public class MyType : MarshalByRefObject {
public void Execute(AppDomainDelegate del) {
Console.WriteLine(AppDomain.CurrentDomain.GetHashCode().ToString());
del();
}
}


この場合、CallBaclMethodは、Main()が実行されているデフォルトのAppDomainではなく、作成した"DomainB"側で、処理が実行される。

...
で、MSDNのドキュメントを見ていたら、AppDomain.DoCallBack メソッドがあるのを知る。なるほど、これを使うと、delegateを別ドメインで動作させることもできるみたいだ。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50675742