-2

ファイルとレジストリ キーの存在をチェックし、探しているすべてのファイルとレジストリ キーを使用AppendText()するC# プログラムがあります。Form.Textbox

これは非同期で実行されておりBackgroundWorker、バックグラウンド ワーカーが実際に非常に高速に処理されているため、UI スレッドがコマンドで詰まりAppendText、プログラムがクラッシュします。UI スレッドの準備が整うまで が再び処理を開始しないBackgroundWorkerように、UI スレッドを同期するにはどうすればよいですか?BackgroundWorker

4

2 に答える 2

1

を持っているBackgroundWorkerので、必要なものはすべて揃っています。進行状況イベントは UI スレッドで呼び出されるため、ワーカーが標準的な方法 ( ReportProgress(int32, object)を呼び出し、追加する文字列を 2 番目のパラメーターとして渡す) で進行状況を報告する場合、フォームの進行状況ハンドラーは を呼び出すことができますAppendText。バックグラウンド スレッドがそのように UI を追い越すことはありません。

BeginInvokeUI を更新するために電話をかけていると思われます。問題を解決する別の方法は、 を呼び出すことInvokeです。

バックグラウンド ワーカーにたとえば 10 行を保存してもらい、それらすべてを一度に progress イベントに渡すと、はるかにうまくいく可能性があります。これにより、更新のオーバーヘッドが削減され、バックグラウンド スレッドの処理が高速になります。

于 2013-11-06T14:56:03.510 に答える