私のトピックはほとんど質問です。スレッドから GUI コントロールへのアクセスに制限があることは知っています。メインスレッド以外の別のスレッドからコントロールに何かを書き込む/設定することはできないようです。
しかし、たとえば、チェックボックスがチェックされているかどうかを読み取ろうとすると、機能します。コンボボックスのテキストを読むことはできません。
.net Framework 4 で Windows フォームを使用しています。
スレッドの制限がどこにあるのか誰か教えてもらえますか?
私のトピックはほとんど質問です。スレッドから GUI コントロールへのアクセスに制限があることは知っています。メインスレッド以外の別のスレッドからコントロールに何かを書き込む/設定することはできないようです。
しかし、たとえば、チェックボックスがチェックされているかどうかを読み取ろうとすると、機能します。コンボボックスのテキストを読むことはできません。
.net Framework 4 で Windows フォームを使用しています。
スレッドの制限がどこにあるのか誰か教えてもらえますか?
UIを使用して何かを実行するアクションを呼び出すことができますが、これは、ワーカースレッドから何かにアクセスする必要がある場合にのみ必要です。
void UpdateMessage (string message)
{
Action action = () => txtMessage.Text = message;
this.Invoke (action);
}
UI 要素にアクセスするときは常に、 UI スレッド上にいる必要があります。あなたが観察したことは、コントロールがチェックボックスかドロップダウンかによって異なりますが、どのスレッドからアクセスしているかによって異なります。
Windows フォーム コントロールはInvoke
、UI スレッドへの呼び出しをディスパッチするメソッドを提供します。async もありBeginInvoke
ます。非同期呼び出しにより、システムが高速化される場合があります (設計によって異なります)。
WPFのDispatcherに関する記事があります: Build More Responsive Apps With The Dispatcher
UI 要素は UI スレッドでのみ更新できます。別のスレッドを使用しているかどうかを知らせるために呼び出しが必要かどうかを確認できます。