2011-01-30 11 views
3

C#の別のスレッドからメインスレッドへの参照を取得するにはどうすればよいですか?C#のメインスレッドへの参照

これはなぜ必要なのですか?たとえば、コンソールアプリケーションにロードされたアセンブリを取り上げます。このアセンブリは、コンソールアプリケーションのメインスレッドで待機(結合)したい別のスレッドを発生させます。どのようにそれを行うのだろうか?

私はこの方法を考えました:Visual Studio 2010では、デバッグ中にスレッド情報を検査できます。スレッドウィンドウの列の1つは、スレッドがワーカースレッドかメインスレッドかを指定するカテゴリです。この情報を得ることは可能ですか?

または、この方法:エントリポイント(メインスレッド?)である関数の名前を取得し、現在のプロセス内のすべてのスレッドを反復するのはどうでしょうか?どのようにしてこの情報を入手できますか?

ありがとうございました。

+2

"このアセンブリは、コンソールアプリケーションのメインスレッドで待機(結合)したい別のスレッドを生成します。通常、メインスレッドは他のスレッドに参加しますが、他のスレッドには参加しません。私はあなたが話していることの必要性を見たことがない。 – bzlm

+0

これはカテゴリではなくスレッド名です – SLaks

+0

エントリポイントに対するアセンブリの反映はどうですか?誰かがエントリポイントの方法を見つける方法を見つけることができますか? – Vertilka

答えて

2

Thread.CurrentThread(メインスレッドとなる)への参照を別のスレッドの作成に保存できます。

+0

Andrayの応答のコメントを見てください – Vertilka

1

スレッドは実際にはメインではありません。あなたが多くのスレッドを生成した後、どちらが重要なのかは重要ではなくなります。どのスレッドが最初に作成されたかを調べる唯一の方法は、グローバルな静的フィールドにそのスレッドへの参照を保存することです。

+2

だから、UIスレッドは何ですか?確かに** UIスレッド**は "メインスレッド"が意味するものです。私はあなたに同意しません。 – Aliostad

+0

@Aliostad:UIスレッドは、現在 'Application.Run'を呼び出しているスレッドです。技術的には、他のスレッドと違いはありません。 – SLaks

+1

@SLaksはい本当ですが、彼らがしていることは非常に異なっています。 WIN32メッセージループを処理するので、処理が異なる必要があります。 – Aliostad