Events und "Cross-thread operation"-Fehler
-
Also meiner Meinung nach kann man es auch übertreiben. Wenn man aus einem Thread im Form was ändern will dann kann ich die Fehlermeldung noch einsehen.
Aber ich habe es ja jetzt schon extra über Events gelöst und es geht immer noch nicht.
Folgendes möchte ich machen:
Ich hab eine Klasse die auf ein GSM-Modem zugreift. Jetzt will ich zB gleich am Anfang abfragen wieviel Guthaben noch auf der Karte ist.
Wenn ich dann die Antwort bekommen habe schiesse ich ein Event ab "ChargeChangeEvent". Dieses fange ich in meiner Applikation ab, und will dann eben den Wert, den ich über ChargeChangedEventArgs" übergebe, in meine Oberfläche reinschreiben. Und da steigt eben das Programm aus wegen "Cross-thread operation". Wie soll man es dann lösen, wenn man es nicht über ein Event machen kann???
-
Events werden in .NET immer von dem aufrufendem Thread ausgeführt. Eine Alternative wäre vielleicht eine Befehlsqueue o.ä..
-
Das Prob konnte ich mittlerweile lösen mit
InvokeRequired und BeginInvoke,
So, jetzt funktionierd aber folgende Funktion nicht mehr:
protected override void WndProc(ref System.Windows.Forms.Message m) { if(!(m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)) { base.WndProc(ref m); } else { ... } }
angeblich stimmen die Parameter nicht überein???
laut MSDN:protected override void WndProc ( ref Message m )
ist es aber richtig. Wo liegt da jetzt bitte der Fehler
-
Ahh, Sorry.
Hab hatte beim BeginInvoke() nicht alle Parameter übergeben.