Powiedzmy, że chcę wysłać parametr int do pracownika w tle, jak można to osiągnąć?
private void worker_DoWork(object sender, DoWorkEventArgs e) {
}
Wiem, kiedy to jest worker.RunWorkerAsync ();, nie rozumiem, jak zdefiniować w pliku worker_DoWork, że powinien przyjmować parametr int.
c#
backgroundworker
sooprise
źródło
źródło
Tuple<A,B>
(C # 4 +) (Edycja: Tak, użyj obiektu, aby spakować wszystko. Zobacz na przykład DoWorkEventArgs self).label1.Text = e.Result.ToString();
wszędzie oznaczyłem to jako bezpieczne.Mimo że jest to już odpowiedź na pytanie, zostawiłbym inną opcję, że IMO jest o wiele łatwiejsze do odczytania:
A na metodzie obsługi:
źródło
... => WorkerDoWork(a, b, c);
... WorkerDoWork(int a, string b, string c) {...
Możesz przekazać wiele takich argumentów.
źródło
Tuple
(lub wyspecjalizowaną klasę) zamiast listy ogólnych obiektówMożesz korzystać z
DoWorkEventArgs.Argument
nieruchomości.Pełny przykład (nawet używając argumentu int) można znaleźć na stronie Microsoftu:
źródło
Sprawdź właściwość DoWorkEventArgs.Argument :
źródło
możesz to wypróbować, jeśli chcesz przekazać więcej niż jeden typ argumentów, najpierw dodaj je wszystkie do tablicy typu Object i przekaż ten obiekt do RunWorkerAsync (). Oto przykład:
Teraz w metodzie doWork pracownika w tle
źródło
Potrzebujesz metody RunWorkerAsync (obiekt) i właściwości DoWorkEventArgs.Argument .
źródło
Należy zawsze starać się używać obiektu złożonego z typami betonowymi (przy użyciu wzorca projektowego złożonego) zamiast listy typów obiektów. Kto by pamiętał, czym do cholery jest każdy z tych obiektów? Pomyśl o późniejszej konserwacji swojego kodu ... Zamiast tego spróbuj czegoś takiego:
I wtedy:
i wtedy:
źródło