Autor Beitrag
Airmetz
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 08.10.10 10:08 
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...

ausblenden 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)
        {

            //**********Variablen werden convertiert**********
            string Client = EmailTextBox1.Text;
            string Server = PasswortTextBox2.Text;
            string Textinhalt = TextTextBox1.Text;
            string URL = UrlTextBox1.Text;
            int Zahl = System.Convert.ToInt32(BeiträgeTextBox3.Text);

            //**********führt backgroundwörker aus**********
            backgroundWorker1.RunWorkerAsync();

        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {

            //**********Nun will ich irgendetwas mit den variablen machen machen z.B*********
         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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 08.10.10 10:26 
Richtig gedacht. Von RunWorkerAsync 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.

Für diesen Beitrag haben gedankt: Airmetz
Airmetz Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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?!


ausblenden 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);
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 08.10.10 11:12 
Richtig.

Für den Aufruf reicht dann : backgroundWorker1.RunWorkerAsync(MeineVariablen);

Im DoWork Callback greifst du dann über die EventArgs wiederum auf den Parameter zu:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
  MeineVariablen x = e.Argument;
        int Ergebnis = x.Einträge *2;
}


Willst du das Ergebnis im Hauptthread anzeigen (musst du es in den events wieder speichern).

Die Informationen dazu findest du alle bei MSDN bzw. MSDN.

Gruß

Für diesen Beitrag haben gedankt: Airmetz
Airmetz Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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?!




ausblenden volle Höhe 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)
        {


       //**********Variablen werden convertiert**********
            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;

            };

            //**********führt backgroundwörker aus**********
            backgroundWorker1.RunWorkerAsync(MeineVariablen);
         }

      private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
        
            //**********Variablen entgegen nehmen**********
            MeineVariablen x = e.Argument;


            int Ergebnis = x.Einträge *2;
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Airmetz