C#: Toolbox ELement mit GUI synchronisieren

Gast #6729884
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."
Gast #6730084
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.
Gast #6730108
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.
Gast #6730229
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.
Gast #6730239
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.
#6730848
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.