議論のために、UIスレッドを、呼び出しApplication.Run()
またはそのオーバーロードの1つが呼び出され、アクティブなメッセージループが実行されているスレッドと見なします。
そのようなスレッドで現在実行されているかどうかを検出する方法はありますか?
これが必要な理由は、実行時間の長いプライベート関数を持つクラスがあるためです。クラス自体はすでにマルチスレッド化されており、このクラスの使用法は、UIまたは処理を実行するバックグラウンドスレッドのいずれかから使用される可能性があるようなものです。この機能もこのネットに分類されます。しかし、UIスレッドをブロックしたくありません。したがって、UIスレッドで実行しているかどうかを検出し、実行している場合は、関数呼び出しをバックグラウンドスレッドにフォークします(おそらくThreadPool
、これはこの説明では問題になりません)。これは完全に正常に動作しますが、バックグラウンドスレッドはおそらく関数の出力に依存しているため、それらをブロックする方が適切ですが、UIスレッドはより「設定して忘れる」方法でアクセスします。