Forum: PC-Programmierung C#: Toolbox ELement mit GUI synchronisieren


von Entwickler (Gast)


Lesenswert?

Hi,

in meiner C# Windows Forms Anwendung habe ich ein Toolbox ELement 
richtTextBox. Dieses soll nun mit der GUI Thread synchronisiert werden.
Dazu gibt es ja verschiedene Möglichkeiten. Allerdings funktioniert das 
mit dem Dispatcher, Invoke usw. nicht. Visual Studio wirft immer den 
Fehler

"Schweregrad  Code  Beschreibung  Projekt  Datei  Zeile 
Unterdrückungszustand
Fehler  CS0120  Für das nicht statische Feld, die Methode oder die 
Eigenschaft "Form.rtb_PrintRecvData" ist ein Objektverweis 
erforderlich."

von Dirk K. (merciless)


Lesenswert?

Ist der Sourcecode geheim oder sollen wir den Fehler erraten?

merciless

von Entwickler (Gast)


Lesenswert?

Ich habe ein generelle Problem. Zum Beispiel möchte ich eine textbox 
oder richtextbox mit dem GUI Thread synchronisieren. Das heisst wenn ich 
GUI aktiv ist sollen auch Daten in die textbox einegeben und angezeigt 
werden können. Ich weiss das da was gibt mit Invoke allerdings gelingt 
mir das nicht.

von Entwickler (Gast)


Lesenswert?

1
public Form()
2
{
3
   ...
4
   client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
5
   ...
6
}
7
8
static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
9
        {
10
            string ReceivedMessage = Encoding.UTF8.GetString(e.Message);
11
            textbox1.Text += ReceivedMessage;
12
        }

Fehlermeldung:
Schweregrad  Code  Beschreibung  Projekt  Datei  Zeile 
Unterdrückungszustand
Fehler  CS0120  Für das nicht statische Feld, die Methode oder die 
Eigenschaft "Form.textbox1" ist ein Objektverweis erforderlich.

von S.E. (Gast)


Lesenswert?

Nimm mal das "static" weg. In einer statischen Methode gibt es kein 
"this".

von Lars R. (larsr)


Lesenswert?

S.E. schrieb:
> Nimm mal das "static" weg. In einer statischen Methode gibt es kein
> "this".

Das wird nicht gehen.

Er kann aber eine statische Variable definieren und der er einen 
"this"-Zeiger speichert, damit die statische Methode darüber zugreifen 
kann.

von S.E. (Gast)


Lesenswert?

Lars R. schrieb:
> Das wird nicht gehen.

Warum sollte das nicht gehen? Ich sehe keinen Grund einen Event Handler 
als statische Methode zu deklarieren. Solange der Event Handler nicht 
innerhalb einer statischen Methoder zugewisen wird, sollte der Delegate 
die "this"-Referenz speichern und dem Handler beim Aufruf mitgeben.

Ich lasse mich gerne eines Belehren, aber dann bitte mit Begründung, 
warum das so nicht gehen sollte.

von S.E. (Gast)


Lesenswert?

*besseren

von Dunno.. (Gast)


Lesenswert?

Lars R. schrieb:
> S.E. schrieb:
>
>> Nimm mal das "static" weg. In einer statischen Methode gibt es kein
>> "this".
>
> Das wird nicht gehen.


Doch.


Trotzdem kann es noch probleme mit dem Zugriff auf das ui-element geben, 
falls der mqtt Client nicht im ui thread läuft, bzw das Event nicht im 
ui thread bearbeitet wird.

Illegal crossthead exception oder so.
Dann kommt der Spaß mit dem Dispatcher zum Zuge.

von Dirk K. (merciless)


Lesenswert?

Entwickler schrieb:
> Fehler  CS0120  Für das nicht statische Feld, die Methode oder die
> Eigenschaft "Form.textbox1" ist ein Objektverweis erforderlich.
Der Fehler besagt, dass du auf ein Objekt zugreifst (Form.textbox1),
welches noch nicht instantiiert worden ist, ein "NULL-Zeiger"
quasi. Aber wenn du den Code nicht postest, kann man dir auch
nicht helfen.

merciless

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.