Возникла такая проблема. Время от времени, BackgroundWorker.RunWorkerCompleted вызывается не из потока, который создал объект (как должно быть), а из других потоков.
Тестовый код такой:
Trace.WriteLine(Thread.CurrentThread.ManagedThreadId);
var worker = new BackgroundWorker();
worker.DoWork += (s, args) => Trace.WriteLine(Thread.CurrentThread.ManagedThreadId);
worker.RunWorkerCompleted += (s, args) => Trace.WriteLine(Thread.CurrentThread.ManagedThreadId);
worker.RunWorkerAsync();
Выдает например такую фигню: 10 6 11
(должно быть 10 6 10)
Есть идеи, в чем причина?