-1

リッチ テキスト ボックスにテキストを追加するスレッドがいくつかあります。Invoke() を使用すると、メインの UI スレッドとワーカー スレッドの間で非常に簡単にデッドロックが発生します。BeginInvoke() を使用すると、望ましくない非同期 UI 更新が発生します。私が判断できない後の段階ではなく、テキストがテキストボックスに即座に表示されるようにします。

タスクを実行するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

3

UI スレッドに触れずに UI スレッドで魔法のように実行することはできません。
を呼び出す場合はInvoke、UI スレッドがバックグラウンド スレッドの待機を停止するようにする必要があります。

ただし、BeginInvoke代わりに電話する必要があります。
BeginInvokeよりもインスタントではありませんInvoke。唯一の違いはInvoke、UI スレッドがデリゲートを実行する機会が得られるまで、呼び出し元のスレッドを強制的に待機させることです。

InvokeUI スレッドがデリゲートを実行するのをバックグラウンド スレッドが待機する必要がある場合 (値を返す場合など) に呼び出します。
通常、常にBeginInvoke;を呼び出す必要があります。通常、UI スレッドが解放されるまでバックグラウンド スレッドを待機させても意味がありません。

于 2011-05-16T03:09:44.273 に答える