Digamos que eu queira enviar um parâmetro int para um trabalhador em segundo plano, como isso pode ser feito?
private void worker_DoWork(object sender, DoWorkEventArgs e) {
}
Eu sei quando isso é worker.RunWorkerAsync () ;, eu não entendo como definir em worker_DoWork que ele deve usar um parâmetro int.
c#
backgroundworker
sooprise
fonte
fonte
Tuple<A,B>
(C # 4 +) (Editar: Sim, use um objeto para compactar tudo. Consulte, por exemplo, DoWorkEventArgs self).label1.Text = e.Result.ToString();
todos os lugares eu marquei isso como seguro.Mesmo que essa seja uma pergunta já respondida, deixaria outra opção que a IMO é muito mais fácil de ler:
E no método manipulador:
fonte
... => WorkerDoWork(a, b, c);
, contanto que corresponda a assinatura do método... WorkerDoWork(int a, string b, string c) {...
Você pode passar vários argumentos como este.
fonte
Tuple
(ou uma classe especializada) em vez de uma lista de objetos genéricosVocê pode usar a
DoWorkEventArgs.Argument
propriedadeUm exemplo completo (mesmo usando um argumento int) pode ser encontrado no site da Microsoft:
fonte
Confira a propriedade DoWorkEventArgs.Argument :
fonte
você pode tentar fazer isso se quiser passar mais de um tipo de argumento, primeiro adicione todos eles a uma matriz do tipo Object e passe esse objeto para RunWorkerAsync (). Aqui está um exemplo:
Agora no método doWork de trabalho em segundo plano
fonte
Você precisa do método RunWorkerAsync (objeto) e da propriedade DoWorkEventArgs.Argument .
fonte
Você deve sempre tentar usar um objeto composto com tipos concretos (usando padrão de design composto) em vez de uma lista de tipos de objetos. Quem se lembraria do que diabos é cada um desses objetos? Pense na manutenção do seu código mais tarde ... Em vez disso, tente algo como isto:
E depois:
e depois:
fonte