擬似コード:背景ワーカーイベント
form1
{
int i;
label1;
Add()
{
i++;
label1 = i.ToString(); //#ErrorLine
}
backgroundworker worker;
worker_DoWork()
{
FileGuard guard = new FileGuard();
guard.FileKilled += guard.KillH(Add);
guard.StarGuarding(); //there is system watcher inside
//this guard and some processing code
//that will fire event FileKilled();
}
}
StartGuarding()労働者が をcompleatedされますが、イベントがあるときFileKilledがクロススレッド#ErrorLine
私はライン上でこのエラーをゴスを解雇した呼び出しのafer operation not valid:作成されたスレッド以外のスレッドからアクセスされる 'form1'を制御します。
BackgroundWorkerはUIを変更できませんか?私はそうだと思いました。 – jgauffin
いいえ、BackgroundWorkerはメインUIとは異なるスレッドで実行されますが、これは 'BackgroundWorker'の主な目的です。 – driis
私は、GUIアップデートを処理できるようになるためには、いくつかの魔法の同期があるという印象を受けました。しかし、私はMSDNでこのテキストを見つけました。DoWorkイベントハンドラ内のユーザーインターフェイスオブジェクトを操作しないように注意する必要があります。代わりに、ProgressChangedおよびRunWorkerCompletedイベントのソースを通じてユーザーインターフェイスに通信します。http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx – jgauffin