Для передачи данных в BackgroundWorker
DoWork
я использую отдельный экземпляр класса-оболочки:
MyParams mpar = new MyParams();
...
mpar.Par1 = par1val;
mpar.Par2 = par2val;
mpar.Par3 = par3val;
...
var worker1 = new System.ComponentModel.BackgroundWorker();
worker1.DoWork += new DoWorkEventHandler(worker1_DoWork);
worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker1_RunWorkerCompleted);
worker1.RunWorkerAsync(mpar);
Тогда я могу использовать параметры mpar
instance в worker1_DoWork
, работая в другом потоке.
void worker1_DoWork(object sender, DoWorkEventArgs e)
{
//here we use mpar.Par1, mpar.Par2 and so on
}
В RunWorkerCompletedEventHandler
мы делаем несколько постакций в потоке пользовательского интерфейса.
Мой вопрос: Можем ли мы использовать в обработчике RunWorkerCompleted
экземпляр mpar
, который работал незадолго до этого в обработчике DoWork
, и можем ли мы быть уверены, что его значения такие же, как в DoWork
? Если нет, каков правильный подход к разделению параметров для различных этапов операции BackgroundWorker
?
void worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Dispatcher.BeginInvoke((Action)(() =>
{
//Can we use the mpar instance here?
}
));
}