According documentation I can access UI from BackgroundWorker.RunWorkerCompleted event. But according my experiment in console application main thread and RunWorkerCompleted thread are different (since thread ID's are different). And this is not acceptable for UI update. How to explain this situation?
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 );
}
Output:
done 1
hello 3
RunWorkerCompleated 5