설명서에 따라 BackgroundWorker.RunWorkerCompleted 이벤트에서 UI에 액세스 할 수 있습니다. 하지만 콘솔 응용 프로그램에서 내 실험에 따르면 주 스레드와 RunWorkerCompleted 스레드는 다릅니다 (스레드 ID가 다르기 때문에). UI 업데이트에는 허용되지 않습니다. 이 상황을 설명하는 방법?BackgroundWorker.RunWorkerCompleted에서 UI를 업데이트 할 수 있습니까?
static BackgroundWorker _bw = new BackgroundWorker();
static void Main(string[] args)
{
_bw.DoWork += DoWork;
_bw.WorkerReportsProgress = true;
_bw.RunWorkerAsync("hello");
_bw.RunWorkerCompleted += _bw_RunWorkerCompleted;
_bw.ProgressChanged += _bw_ProgressChanged;
Console.WriteLine("done "+ Thread.CurrentThread.ManagedThreadId);
Console.ReadLine();
}
private static void _bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine("RunWorkerCompleated " + Thread.CurrentThread.ManagedThreadId);
}
private static void DoWork(object sender, DoWorkEventArgs e)
{
Console.WriteLine(e.Argument+ " "+Thread.CurrentThread.ManagedThreadId);
}
출력 :
done 1
hello 3
RunWorkerCompleated 5
당신이 뭘하려고하고 어떤 문제가 발생했는지 명확하게 설명 할 수 있습니까? –