2

私のトピックはほとんど質問です。スレッドから GUI コントロールへのアクセスに制限があることは知っています。メインスレッド以外の別のスレッドからコントロールに何かを書き込む/設定することはできないようです。

しかし、たとえば、チェックボックスがチェックされているかどうかを読み取ろうとすると、機能します。コンボボックスのテキストを読むことはできません。

.net Framework 4 で Windows フォームを使用しています。

スレッドの制限がどこにあるのか誰か教えてもらえますか?

4

3 に答える 3

1

UIを使用して何かを実行するアクションを呼び出すことができますが、これは、ワーカースレッドから何かにアクセスする必要がある場合にのみ必要です。

void UpdateMessage (string message)
{
  Action action = () => txtMessage.Text = message;
  this.Invoke (action);
}

これはスレッド化についての本当に良いリソースです

于 2013-03-12T15:32:22.047 に答える
1

UI 要素にアクセスするときは常に、 UI スレッド上にいる必要があります。あなたが観察したことは、コントロールがチェックボックスかドロップダウンかによって異なりますが、どのスレッドからアクセスしているかによって異なります。

Windows フォーム コントロールはInvoke、UI スレッドへの呼び出しをディスパッチするメソッドを提供します。async もありBeginInvokeます。非同期呼び出しにより、システムが高速化される場合があります (設計によって異なります)。

WPFのDispatcherに関する記事があります: Build More Responsive Apps With The Dispatcher

于 2013-03-12T15:26:36.533 に答える
0

UI 要素は UI スレッドでのみ更新できます。別のスレッドを使用しているかどうかを知らせるために呼び出しが必要かどうかを確認できます。

GUI オブジェクトで呼び出しが必要になるのはいつですか?

于 2013-03-12T15:28:07.500 に答える