Digamos que quiero enviar un parámetro int a un trabajador en segundo plano, ¿cómo se puede lograr esto?
private void worker_DoWork(object sender, DoWorkEventArgs e) {
}
Sé cuándo se trata de worker.RunWorkerAsync () ;, no entiendo cómo definir en worker_DoWork que debería tomar un parámetro int.
c#
backgroundworker
sooprise
fuente
fuente
Tuple<A,B>
(C # 4 +) (Edición: Sí, use un objeto para empaquetarlo todo. Vea, por ejemplo, DoWorkEventArgs self).label1.Text = e.Result.ToString();
todas partes marqué eso como seguro.Aunque esta es una pregunta ya respondida, dejaría otra opción que IMO es mucho más fácil de leer:
Y en el método del controlador:
fuente
... => WorkerDoWork(a, b, c);
siempre que coincida con la firma del método... WorkerDoWork(int a, string b, string c) {...
Puede pasar múltiples argumentos como este.
fuente
Tuple
(o una clase especializada) en lugar de una lista de objetos genéricosPuedes usar el
DoWorkEventArgs.Argument
propiedad.Se puede encontrar un ejemplo completo (incluso utilizando un argumento int) en el sitio de Microsoft:
fuente
Consulte la propiedad DoWorkEventArgs.Argument :
fuente
puede probar esto si desea pasar más de un tipo de argumentos, primero agréguelos todos a una matriz de tipo Object y pase ese objeto a RunWorkerAsync () aquí hay un ejemplo:
Ahora en el método doWork de trabajador de fondo
fuente
Necesita el método RunWorkerAsync (objeto) y la propiedad DoWorkEventArgs.Argument .
fuente
Siempre debe intentar usar un objeto compuesto con tipos concretos (usando un patrón de diseño compuesto) en lugar de una lista de tipos de objetos. ¿Quién recordaría qué diablos es cada uno de esos objetos? Piense en el mantenimiento de su código más adelante ... En su lugar, intente algo como esto:
Y entonces:
y entonces:
fuente