C# threading mit Invoke nur wie =)

08/26/2012 17:57 .Scare™#1
hallo com, ich habe vor mein tool was ich geschriben habe in mehreren threads laufen zu lassen.

doch dabei stosse ich auf ein problem, ich habe eine if anweisung mit einer checkbox doch dies muss ich über invoke machen. doch ich bekomme es nicht hin.

habt ihr mir einen Vorschlag?

PHP Code:
if (checkBox3.Checked == true
Fehler:
Code:
Fehler	1	Für das nicht statische Feld, die Methode oder die Eigenschaft "WindowsFormsApplication1.Form1.checkBox3" ist ein Objektverweis erforderlich.	C:\Users\Achim\documents\visual studio 2012\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs	73	8	WindowsFormsApplication1
08/26/2012 18:16 -PinkiWinki-#2
Code:
checkBox3.Invoke( new MethodInvoker(() =>
                {
                    // dein code
                    if (checkBox3.Checked == true) 
                    // ....
                }));
08/26/2012 18:20 .Scare™#3
danke, doch leider geht das auch nicht.

so habe ich es bisher:

PHP Code:
checkBox3.Invoke( new MethodInvoker(() => {
            if (
checkBox3.Checked == true)
            {
                
gbname "1";
            }
            else
            {
                
gbname "2";
            }

})); 
08/26/2012 18:36 -PinkiWinki-#4
Sorry mein Fehler, hab mir die Fehlermeldung nicht angeschaut :p. Jedenfalls läuft dein Thread in einer statischen Methode weshalb du nicht einfach mit checkBox3 auf das Element der Instanz zugreifen kannst.

Eine Möglichkeit wäre:

Thread mit Hilfe von Lambda erstellen
Code:
new Thread(new ThreadStart(() =>
                {
                   
                    checkBox1.Invoke(new MethodInvoker(() =>
                    {
                         //dein code
                    }));
                })).Start();
oder du übergibst ein Objekt deiner Form Instanz an den Thread über Parameter und führst dein Code über eine Methode aus die "public" ist.

Code:
new Thread(new ParameterizedThreadStart(meinThread)).Start(this);
Code:
static void meinThread(object o)
        {
            Form1 frm = (Form1)o;
            frm.MeinCodeStuff();
        }

        public void MeinCodeStuff()
        {
            if (InvokeRequired)
            {
                // Wir brauchen einen Invoke um an den GUI Thread zu kommen!
                Invoke(new MethodInvoker(MeinCodeStuff));
                return;
            }

            // mein code
            if (checkBox1.Checked)
                MessageBox.Show("bla");
        }
08/26/2012 18:39 nkkk#5
um eine Eigenschaft abzufragen muss man im normalerweise kein invoke benutzen das muss man nur, wenn man den Wert setzten will.
in diesem Fall musst du es also nicht.
08/26/2012 18:45 .Scare™#6
ja, das verstehe ich eben auch nicht ich frage da ja nur ob die chekbox aktiviert ist oder nicht...

erst weiter unten muss ich dan div. werte in eine Textbox schreiben.

finde dies echt grad schlimm, das es in VB z.b. so vieles einfacher ist als hier in c#....
08/27/2012 13:23 BlackHybrid#7
Du könntest Theoretisch auch eine statische Variable verwenden die du beim setzen bzw. dem Entfernen des Hakens veränderst und auf die aus dem Thread zugreifen.
08/27/2012 15:40 .Scare™#8
hm, okayyy, ich habe gesehen das das Problem nor dann kommt wen ich eine public static void mache

doch wen ich dies nicht mache kann ich nicht mit mehreren threads arbeiten....

warum muss das in c#so dumm sein wobei es doch bei vb.net so leicht geht...

hoffe es kann mir jemand ein kleines Beispiel dazugeben.

danke
08/27/2012 16:03 -PinkiWinki-#9
Ich hab dir bereits ein Beispiel gepostet... Jetzt musst du nur noch verstehen und am besten erstmal C# ordentlich lernen.
08/27/2012 20:03 nkkk#10
du brauchst für mehrere threads kein "static public void"
08/28/2012 16:08 .Scare™#11
Quote:
Originally Posted by -PinkiWinki- View Post
Ich hab dir bereits ein Beispiel gepostet... Jetzt musst du nur noch verstehen und am besten erstmal C# ordentlich lernen.
ja, Vielen dank. Ich habe dies verstanden und auch umgesetzt. doch der Fehler liegt an dem Static. sobald ich es mit static mache geht es nicht mehr.

eine Kommunikation mit der form geht prima.

Quote:
Originally Posted by nkkk View Post
du brauchst für mehrere threads kein "static public void"
hmm, wen ich es ohne static mache dan bekomme ich einen Fehler bei den Thread's... ich schaus nochmals an und editiere die Fehler.

mfg und danke für die Hilfe