- PR -

[C#]AppDomain について

1
投稿者投稿内容
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2006-04-06 18:46
いつもお世話になってます。
相変わらず AppDomain やらについて勉強中のまかろにです。

色々とテストをしていてふと気づいたんですが
例えば、C#で単純な実行ファイル(Windowsアプリケーションでプロジェクトを作って
コンパイルしただけの、ただフォームが表示されるだけのもの) を2つ用意し
それらをA.exe / B.exe とします。

そして、Aが起動したらBも起動するというふうにしてみようと思って
Aのmain()の一番先頭でBを起動するコードを入れてみたんところ
ProcessのStartメソッドで起動させた場合は普通に2つのフォームが開きますが
AppDomain で新しいドメインを作って、ExecuteAssemblyメソッドで起動させた場合
Bのメッセージループ(?)から返ってこずに、Bのフォームを閉じたら
Aのフォームが開くという感じです。

新しいドメインを作ってそこから起動させたので
別スレッドとしてお互い動いてくれるのかなぁなんて思っていたのですが
どうも私が勘違いしてるみたいです。

よろしければこの辺りをご教授願えませんでしょうか?
よろしくお願いします。

[開発環境]
Windows XP
Visual Studio .NET2005

なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-04-06 20:27
引用:

まかろにさんの書き込み (2006-04-06 18:46) より:
ProcessのStartメソッドで起動させた場合は普通に2つのフォームが開きますが
AppDomain で新しいドメインを作って、ExecuteAssemblyメソッドで起動させた場合
Bのメッセージループ(?)から返ってこずに、Bのフォームを閉じたら
Aのフォームが開くという感じです。


ExecuteAssemblyは確か同じスレッドで実行されたと思います。
※でもメッセージループは共有されてたような気もしないでもない。

なので、スレッドを作成して、そちらから実行する必要があると思います。
作成したスレッドは、STAThreadに明示的に設定する必要があったような気もします。
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2006-04-07 00:41
引用:

なちゃさんの書き込み (2006-04-06 20:27) より:

ExecuteAssemblyは確か同じスレッドで実行されたと思います。
※でもメッセージループは共有されてたような気もしないでもない。

なので、スレッドを作成して、そちらから実行する必要があると思います。
作成したスレッドは、STAThreadに明示的に設定する必要があったような気もします。



同じスレッドですか〜 なるほど、納得しました。

ということは、順序としては(試す環境が今は無いので予想で書きますが)
・Aのmain()の先頭で新しいスレッドを作成
・AppDomain を作成
・スレッドにドメインを割り当てる
・ExecuteAssemblyメソッドを呼んでBを起動
てな感じですかね?

3番目の「スレッドにドメインを割り当てる」ってのが
表現としてあってるのか微妙なとこなんですが・・・いかがでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)