- PR -

[C#] processクラスについて

1
投稿者投稿内容
みずりん
会議室デビュー日: 2005/08/03
投稿数: 3
投稿日時: 2005-08-07 14:18
いつも参考にさせていただいてます。

processクラスを使って他プロセスを起動するプログラムを作成しています。
起動したプロセスの終了はExitedイベントで非同期にハンドリングしています。

Exitedイベントをハンドリングするメソッド(Process_Exited)内で、フォーム内(メインウィンドウ)のコントロールを操作する処理を記述したところ、「実行スレッドが間違っている」という内容の例外が発生してしまいました。
そこで調べた結果、processクラスのSynchronizingObjectプロパティにフォームのインスタンスを設定してやれば良いということがわかりました。

これで例外は発生しなくなったのですが、別の問題が出てしまいました。
SynchronizingObjectプロパティを設定する前は、Process_Exitedメソッドが受け取る第一パラメータがprocessクラスのインスタンスだったのですが、SynchronizingObjectプロパティにフォームのインスタンスを設定した事で、パラメータがフォームのインスタンスになってしまいました。

メインのフォームからは、複数のプロセスを平行して起動するため、Process_Exitedメソッド内では、どのプロセスが終了したのかを判断する必要があるのですが、良い方法はないのでしょうか。
ご存知の方おりましたら、アドバイスお願いいたします。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-08-07 17:21
SynchronizingObjectを使う代わりに、Process_Exitイベントハンドラ内でフォームのInvokeメソッドを使用するのはどうでしょう。多少コーディングが面倒になりますが。

余談:
.NET 2.0ベータ2ではsenderがProcessインスタンスになってました。
ですからsenderがSynchronizingObjectであると決めうちでコーディングするのは微妙かと思いました。
1

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