Entwickler-Ecke
WinForms - BackgroundWorker THREAD: 5 Variablen Mitgeben
Airmetz - Fr 08.10.10 10:08
Titel: BackgroundWorker THREAD: 5 Variablen Mitgeben
Liebe Leser/inen,
Ich habe folgendes Problem ich möchte im Hintergrund einen neuen Thread öffnen, damit die Form nicht einfriert, weil ich deine Endlosschleife in dem neuen Thread einfügen will.
Dazu muss ich aber an dem neuen Thread ( ich nehme den Backgroundworker aus der Toolbox) 5 Variablen übergeben, wie mache ich das?
Bisher sieht es gaaanz ungefair so aus...
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| private void button1_Click(object sender, EventArgs e) {
string Client = EmailTextBox1.Text; string Server = PasswortTextBox2.Text; string Textinhalt = TextTextBox1.Text; string URL = UrlTextBox1.Text; int Zahl = System.Convert.ToInt32(BeiträgeTextBox3.Text);
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
int Ergebnis = Zahl*2;
} |
Wäre seeehr froh wenn mir jemand helfen kann ich verzweifle schon fast, habe mich schon überall duchge
"googlet" :)
Doch ich werde nicht fündig.
backgroundWorker1.RunWorkerAsync(); <---- Da so denke ich müsste man doch die Variablen mitgeben oder nicht?..
Vielen Dank für die mühe, an die helfenden.
LG
Ralf Jansen - Fr 08.10.10 10:26
Richtig gedacht. Von
RunWorkerAsync [
http://msdn.microsoft.com/en-us/library/f00zz5b2.aspx] gibt es auch eine Überladung mit einem Parameter für die Argumente. Deine 5 Variablen könntest du also also Klasse/Struct zusammenfassen und in RunWorkerAsync übergeben. In deinem DoWork Event findest du deine Klasse mit den Variablen dann in den DoWorkEventArgs.
Airmetz - Fr 08.10.10 11:00
könntest du etwas genauer sagen wie du es meinst, entschuldige meine unwissen heit, aber so sollte es doch eig aussehen; WENN ICH ein strukt erstelle was ich dann weitergeben will?!
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| struct MeineVariablen { string Server; string Client; string Textinhalt; string URL; int Einträge;
}; backgroundWorker1.RunWorkerAsync(objekt MeineVariablen); |
Airmetz - Fr 08.10.10 11:50
So sieht es nun aus, jedoch kommt eine fehlermeldung beim struct, bzw. sagt er das eine "}" benötigt wird bevor das strunkt anfängt.
Darf das Strukt nicht unter dem button1_Click sein oder was ist mein Fehler?!
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| private void button1_Click(object sender, EventArgs e) {
string Client = EmailTextBox1.Text; string Server = PasswortTextBox2.Text; string Textinhalt = TextTextBox1.Text; string URL = UrlTextBox1.Text; int Zahl = System.Convert.ToInt32(BeiträgeTextBox3.Text);
struct MeineVariablen { Client; Server; Textinhalt; URL; Zahl;
};
backgroundWorker1.RunWorkerAsync(MeineVariablen); }
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { MeineVariablen x = e.Argument;
int Ergebnis = x.Einträge *2; |
danielf - Fr 08.10.10 12:39
Ich arbeite nicht mit Structs, ich denke aber nicht das es das darf.
In solchen Fällen einfach MSDN fragen!
Ralf Jansen - Fr 08.10.10 13:35
Zitat: |
So sieht es nun aus, jedoch kommt eine fehlermeldung beim struct, bzw. sagt er das eine "}" benötigt wird bevor das strunkt anfängt. |
Du kannst structs und Klassen in anderen Klassen definieren aber nicht in einer Methode. Das würde dir auch nichts nutzen wenn du es könntest. Der Scope in der Methode wäre nur diese Methode darüber hinaus wäre diese Datenstruktur nicht bekannt. Du musst also den struct vor der Methode definieren nicht in der Methode.
Ich hatte in meiner ersten Antwort structs auch nur der Vollständigkeit halber erwähnt. Das hilft hier wenig und du solltest eher eine einfache Klasse nehmen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!