- PR -

プロセス内で実行されているスレッドオブジェクトを取得するには?

1
投稿者投稿内容
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-01-09 00:20
こんにちは、野寺といいます。

現在次のようなWindowsアプリケーションを作成しています。
メニューを持つWindowsアプリケーション(.exe)がいます。
メニュープログラムは、メニューから選択された内容によりDLLを動的にロードします。
DLLはフォームを持っており、メニュープログラムがそのフォームを自分自身のフォームにに貼り付け、ユーザーはそのフォームを操作することができるようになっています。。
また、そのフォームには終了ボタンがありメニューに戻るような仕組みになっています。

そしてDLLがもつフォームの操作によっては、DLLの内部処理でスレッドを起動する場合があります。

このとき何らかの理由(まあ、不具合なんですが)によりスレッドを正しく終了せず、スレッドが無限待機のような状態に陥ってしまった場合、たとえば[Alt]+[F4]でプログラムを強制終了させても
メニューのウィンドウは消えるもののスレッドが生きているためか、プログラムは実行されたままとなってしまいます。(タスクマネージャで確認)

そこでメニューフォームが終了するときのイベントで、もし生きているスレッドがあれば強制的に終了させたいと思っているのですが、スレッドはメニュープログラムが直接生成しているわけではないので、スレッドのオブジェクトを管理していません。
この場合、メニュープログラムはスレッドのオブジェクトを取得して、そのスレッドを終了させることはできるのでしょうか?

System.Threading名前空間を探してみましたが、そのようなメソッド等は探すことができず(探し方が悪いかも)、System.Diagnostics.ProcessクラスのThreadsプロパティで取れるのかな?と思いましたが、このプロパティで取れるのは、ProcessThreadクラスのオブジェクトで直接のThreadオブジェクトではありませんでした。
ただ、ProcessThreadクラスでスレッドのIDが取得できるようなので、このIDからThreadオブジェクトが取得できないのかな?とも思っております。

どなたか、直接の回答でもヒントでもよいので、分かる方がいらっしゃいましたらよろしくお願いします。

**本質的には当然スレッドが終了されていない不具合を修正するべきなんですが。。。とりあえずの逃げを作りたい。。。

開発環境:
WindowsXP Pro
VS.NET2003
C#
1

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