Geht Invoke auch für Kommunikation aus Form zum Thread?


july

Erfahrenes Mitglied
Hallo zusammen,
ich versuche gerade einen Wert aus einer Form an einen Thread übergeben, um den Thread zu beenden. Leider bekomm ich dabei folgende Compilerfehler:

Error 1 'SmartDeviceProject3.Client' does not contain a definition for 'InvokeRequired' and no extension method 'InvokeRequired' accepting a first argument of type 'SmartDeviceProject3.Client' could be found (are you missing a using directive or an assembly reference?)
Error 2 'SmartDeviceProject3.Client' does not contain a definition for 'Invoke' and no extension method 'Invoke' accepting a first argument of type 'SmartDeviceProject3.Client' could be found (are you missing a using directive or an assembly reference?)

ich vermute, dass der Compiler so reagiert weil bei dem Thread vielleicht noch iwo InvokeRequired auf true gesetzt werden soll.

Hier ist mein Code:
Code:
Form.cs

public partial class Form1 : Form
    {
      ........
     delegate void SetStoppedValueCallback(int value);
      .......
      public void SetStoppedValue(int value)
        {
            if (client.InvokeRequired)
            {
                SetStoppedValueCallback d = new SetStoppedValueCallback(this.client.setStopped);
                client.Invoke(d, new object[] { value });
            }
        }
}

Client.cs
        public void setStopped(int value)
        {
            stopped = value;
        }

Habt ihr ne Idee wie man das Problem lösen könnte?

Grüße July
 

Nico Graichen

Erfahrenes Mitglied
Hi

Die Fehlermeldung ist eigentlich eindeutig: Client hat weder den Member Invoke noch InvokeRequired!
Die beiden Member werden von der Control-Klasse zur Verfügung gestellt. Ist Client ein Control?
 

DimpiM

Mitglied
schreib in dein Konstuktor nachdem InitializeComponent den Befehl CheckForIlegalCrossCalls=false;

Code:
public Form1()
{
      InitializeComponent();
      CheckForIllegalCrossThreadCalls = false;
}

dann brauchst dich mit den Invoke usw. nicht mehr rumärgern.
 

DimpiM

Mitglied
Für Anfänger ist die Methode schon gut. Wobei, wenn man sie kennt überwiegt ganz stark die Faulheit wenn man das nächste mal was mit Threads programmiert :D
 

Shakie

Erfahrenes Mitglied
schreib in dein Konstuktor nachdem InitializeComponent den Befehl CheckForIlegalCrossCalls=false; dann brauchst dich mit den Invoke usw. nicht mehr rumärgern.
Auf keinen Fall! Man gewöhnt sich nur einen schlechten Programmierstil an!
@July: Hör auf Nico.
Hast du deine originale Fehlermeldung inzwischen verstanden und konntest das Problem lösen?
 

july

Erfahrenes Mitglied
Hast du deine originale Fehlermeldung inzwischen verstanden und konntest das Problem lösen?
jep, hab ich verstanden und hab mein Problem jetzt einfacher gelöst, hab die Variable die ich brauche einfach im Thread public gemacht und übergebe in Form ihr einen richtigen Wert. Funktionniert 1A. Und da sie niergendswo anders verwendet wird, kommt zu keinen Konflikten.
Grüße July
 

Forum-Statistiken

Themen
272.356
Beiträge
1.558.615
Mitglieder
187.831
Neuestes Mitglied
gorke