Obiekt BackgroundWorker pozwala przekazać pojedynczy argument do DoWorkEventHandler.Alternatywa dla BackgroundWorker, która akceptuje więcej niż jeden argument?
// setup/init:
BackgroundWorker endCallWorker = new BackgroundWorker();
endCallWorker.DoWork += new DoWorkEventHandler(EndCallWorker_DoWork);
...
endCallWorker.RunWorkerAsync(userName);
// the handler:
private void EndCallWorker_DoWork(object sender, DoWorkEventArgs e)
{
string userName = e.Argument as string;
...
}
Aby przekazać wiele argumentów, muszę zawinąć je w obiekcie, jak tego biednego tablicy ciągów:
// setup/init:
BackgroundWorker startCallWorker = new BackgroundWorker();
startCallWorker.DoWork += new DoWorkEventHandler(StartCallWorker_DoWork);
...
startCallWorker.RunWorkerAsync(new string[]{userName, targetNumber});
// the handler:
private void StartCallWorker_DoWork(object sender, DoWorkEventArgs e)
{
string[] args = e.Argument as string[];
string userName = args[0];
string targetNumber = args[1];
}
Czy istnieje inny obiekt lub wzór, który pozwala nam przekazać wiele argumentów ładnie, a najlepiej, napisać własny podpis?
można rozwinąć, jak to działa? (szczególnie "(s, e)" ... dlaczego są zadeklarowane?) –
Bardzo to lubię - dla mojego przypadku użycia działa świetnie, ale bardziej złożone aplikacje mogą mieć problemy, tj. potrzebuję dostępu do parametru wartości (nazwa użytkownika i numer docelowy) w setup/init. –
Cieszę się, że mogę pomóc (i trochę więcej tekstu). –