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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.