現在実行中のスレッドがGUIコンテキストにあるかどうかを確認するにはどうすればよいですか?スレッドがGUIコンテキストにあるかどうかをチェック
5
A
答えて
5
参照してください。はい/いいえの答えよりもヒューリスティックです。ヒューリスティックはGUIフレームワークごとに異なります。 WPFのために
良いものが、これは単にランダムなスレッドでDispatcher
を設定するが、実際には入れないでだまさすることができますが、現在のスレッド
public static bool IsWpfGuiThread() {
return Dispatcher.FromThread(Thread.CurrentThread) != null;
}
のアクティブDispatcher
としてチェックして、そこかどうかを確認することですその上にGUIがあります。
WinFormsのを確認するために良いものは、現在のSynchronizationContext
です。
public static bool IsWinFormsGuiThread() {
return SynchronizationContext.Current is WindowsFormsSynchronizationContext;
}
しかし、これは別の同期コンテキストにCurrent
値をリセット一時的に人によってだまさ(以上)することができます。これは基本的に単なるグローバルスレッドであり、誰でも設定できます。実際には、Visual Studioなどの特定のアプリケーションで変更するのがかなり一般的です(ただし、WPFアプリです)。
0
私はあなたがDispatcher
オブジェクトをしたいと思います。それはそれはGUIのコンテキストを構成するものは常に完全に明白ではないので、100%の精度で、この質問に答えるために、残念ながら難しいhttp://social.msdn.microsoft.com/forums/en-US/wpf/thread/360540eb-d756-4434-86f9-a3449f05eb55
1
既知のGUIオブジェクトがあるかどうかを確認して、適切なコンテキストであるかどうかを確認できますかそのオブジェクト?私はguiObject.VerifyAccess()
がこれのために働くと思う。
関連する問題
- 1. スレッドがブーストスレッドかどうかをチェック
- 2. オブジェクトがあるかどうかをチェック
- 3. タグページがあるかどうかWordpressチェック
- 4. スレッドがスリープ状態にあるかどうかを調べる
- 5. Android - レイアウトにオブジェクトがあるかどうかチェックするには?
- 6. ロケーションが境界内にあるかどうかをチェック
- 7. オブジェクトがコンテキストエンティティフレームワーク内にあるかどうかをチェック
- 8. 要素に2つのクラスがあるかどうかをチェック
- 9. アイテムが配列/リスト内にあるかどうかチェックする
- 10. 値がリストにあるかどうかチェックする方法
- 11. 画像に透明性があるかどうかのJavaチェック
- 12. エッジがあるサイクルにあるかどうかをチェックする方法?
- 13. 変数が空であるかどうかをチェックする(複数のチェック!)
- 14. EditTextが空であるかどうかをチェックする
- 15. 値がRであるかどうかをチェックする
- 16. UITextFieldsが空であるかどうかをチェックする方法?
- 17. java.lang.reflect.TypeがEnumであるかどうかをチェックする方法
- 18. フォーム入力があるかどうかをチェック
- 19. 数字が - 、+、またはxであるかどうかをチェック
- 20. 変数が空であるかどうかをチェック
- 21. アイテムが汎用クラスのインスタンスであるかどうかをチェック
- 22. TypeがTypeBuilderであるかどうかをチェック
- 23. 複素数がNaNであるかどうかをチェック
- 24. イベントターゲットがハイパーリンクであるかどうかをチェック
- 25. オブジェクトがnullであるかどうかをチェック
- 26. ユーザーがJavaアプリケーションのルートであるかどうかをチェック
- 27. マングース:オブジェクトがマングースオブジェクトであるかどうかをチェック
- 28. rails 3.0.3ブール値が真であるかどうかをチェック
- 29. オブジェクトがNSArrayまたはNSDictionaryであるかどうかをチェック
- 30. プロセスが進行中であるかどうかをチェック
私は、これは古い答えですけど、... [Dispatcher.FromThread()](httpsを使用して、現在のスレッドでアクティブなディスパッチャをチェックし、WPFのアプリで複数のUIスレッドがあることができます:// MSDNを。 microsoft.com/en-us/library/system.windows.threading.dispatcher.fromthread(v=vs.110).aspx)は、UIスレッドであることを示す良い指標ではありません。これを処理する最善の方法の1つは、長い実行スレッドまたはバックグラウンドスレッドを開始するスレッドのSynchronizationContextを追跡することです。これは非同期/待機が役に立ちます(この回答が最初に書き込まれたときに存在していたものではありません)。 – slugster