vez varias tutorial tareas sharp segundo que puede progresschanged plano ocupado está este ejecutar dowork aplicacion actualmente c# multithreading parameters backgroundworker

varias - que es backgroundworker c#



Usar parámetros en controladores de BackgroundWorker (1)

Puede asignar el valor de e.Result en worker1_DoWork

static void worker1_DoWork(object sender, DoWorkEventArgs e) { //Do the work //... e.Result = new MyParams(); }

Luego puede obtenerlo en worker1_RunWorkerCompleted en e.Result .

Si necesita pasar un valor de resultado adicional y no desea poner el objeto MyParams en worker1_DoWork: e.Result , entonces puede crear una clase pequeña ResultHolder con MyParams y MyResult como propiedades y usar esa clase para pasar el resultado en worker1_DoWork

Para pasar datos a un DoWork BackgroundWorker , uso una instancia de clase contenedora separada:

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);

Entonces puedo usar parámetros de la instancia de worker1_DoWork en worker1_DoWork , operando en otro hilo.

void worker1_DoWork(object sender, DoWorkEventArgs e) { //here we use mpar.Par1, mpar.Par2 and so on }

En RunWorkerCompletedEventHandler hacemos algunas postacciones en el hilo de UI.

Mi pregunta es: ¿podemos usar en el controlador mpar instancia mpar , que funcionó justo antes en el controlador DoWork y podemos estar seguros de que sus valores son los mismos que tenía en DoWork ? Si no, ¿cuál es el enfoque correcto para compartir parámetros para varias etapas de funcionamiento de BackgroundWorker ?

void worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Dispatcher.BeginInvoke((Action)(() => { //Can we use the mpar instance here? } )); }