Angenommen, ich möchte einen int-Parameter an einen Hintergrundarbeiter senden. Wie kann dies erreicht werden?
private void worker_DoWork(object sender, DoWorkEventArgs e) {
}
Ich weiß, wann dies worker.RunWorkerAsync (); ist. Ich verstehe nicht, wie man in worker_DoWork definiert, dass es einen int-Parameter annehmen soll.
c#
backgroundworker
Sooprise
quelle
quelle
Tuple<A,B>
(C # 4 +) (Bearbeiten: Ja, verwenden Sie ein Objekt, um alles einzupacken. Siehe zum Beispiel DoWorkEventArgs self).label1.Text = e.Result.ToString();
Überall habe ich das als sicher markiert.Obwohl dies eine bereits beantwortete Frage ist, würde ich eine andere Option belassen, die IMO viel einfacher zu lesen ist:
Und zur Handler-Methode:
quelle
... => WorkerDoWork(a, b, c);
solange sie mit der Methodensignatur... WorkerDoWork(int a, string b, string c) {...
Sie können mehrere Argumente wie folgt übergeben.
quelle
Tuple
(oder eine spezialisierte Klasse) als eine Liste allgemeiner Objekte bevorzugenSie können die
DoWorkEventArgs.Argument
Eigenschaft verwenden.Ein vollständiges Beispiel (auch unter Verwendung eines int-Arguments) finden Sie auf der Microsoft-Website:
quelle
Überprüfen Sie die DoWorkEventArgs.Argument-Eigenschaft :
quelle
Sie können dies ausprobieren, wenn Sie mehr als einen Argumenttyp übergeben möchten. Fügen Sie zunächst alle zu einem Array vom Typ Object hinzu und übergeben Sie dieses Objekt an RunWorkerAsync (). Hier ein Beispiel:
Jetzt in der doWork-Methode des Hintergrundarbeiters
quelle
Sie benötigen die RunWorkerAsync (Objekt) -Methode und die DoWorkEventArgs.Argument- Eigenschaft.
quelle
Sie sollten immer versuchen, ein zusammengesetztes Objekt mit konkreten Typen (unter Verwendung eines zusammengesetzten Entwurfsmusters) anstelle einer Liste von Objekttypen zu verwenden. Wer würde sich daran erinnern, was zum Teufel jedes dieser Objekte ist? Denken Sie später über die Wartung Ihres Codes nach ... Versuchen Sie stattdessen Folgendes:
Und dann:
und dann:
quelle