引数のために、Application.Run()
への呼び出しを持っていたスレッド、またはそのオーバーロードの1つが呼び出され、アクティブなメッセージループが実行されているスレッドとして考えます。UIスレッドであるかどうかを検出する方法は?
私たちがこのようなスレッドで現在実行しているかどうかを検出する方法はありますか?
長時間実行しているプライベート関数を持つクラスがあるためです。クラス自体はすでにマルチスレッド化されており、このクラスの使用法は、UIまたは処理を行っているバックグラウンドスレッドから使用できるようになっています。この関数もこのネットに入ります。しかし、私はUIスレッドをブロックしたくありません。だから、私はUIスレッドで実行されているかどうかを検出したい場合は、バックグラウンドスレッドに関数呼び出しをフォークします(おそらくThreadPool
ですが、このディスカッションでは問題ありません)。これは完全に正常に動作しますが、バックグラウンドスレッドは関数の出力に依存している可能性が高いため、UIスレッドがより「設定と忘却」の方法でアクセスしているのに対して、それらのブロッキングはより優れています。
startupthreadは必ずしもGUIスレッドまたは唯一のGUIスレッドである必要はありません。 –
WRONG:InvokeRequiredは、「コントロールが作成されたスレッドとは異なるスレッド」の場合にtrueを返します。 –
@Rico:もちろん、そうです。私はタイプミスがここ3年間何も気付いていないと信じられません。それをキャッチしてくれてありがとう、私はそれに応じて答えを更新しました。 –