Entwickler-Ecke
Basistechnologien - Invoken in Klasse?
Christoph1972 - So 18.01.09 22:40
Titel: Invoken in Klasse?
Hallo zusammen,
ich habe eine Klasse, in dieser empfange ich Daten vom Serial Port. Die Daten übergebe ich an meine Main Form, dazu ist ein Invoke nötig, was auch funktioniert. Aber wie kann ich es erreichen, das ich die Daten schon Threadsicher aus der Klasse übergebe? Also, dass das Invoke schon in der Klasse passiert. Aber in der Klasse ist Invoke oder InvokeRequired ja nicht verfügbar. Gibt es eine Möglichkeit das zu erreichen? Ich würde es einfach sauberer finden, wenn die Logic dazu in der Klasse ist.
Gruß
Christoph
Kha - Mo 19.01.09 12:58
Titel: Re: Invoken in Klasse?
Christoph1972 hat folgendes geschrieben : |
| Ich würde es einfach sauberer finden, wenn die Logic dazu in der Klasse ist. |
Die Synchronisierung ist Aufgabe der GUI, mit der deine Klasse nichts zu tun hat. Ein asynchrones Event ist also kein Designfehler, SerialPort und viele andere Klassen machen es ja auch so.
Ralf Jansen - Mo 19.01.09 13:33
Die Datenübergabe erfolgt per Event?
Dann könntest du den Event schon so ausführen das der EventHandler im Threadcontext des jeweiligen Subscribers ausgeführt wird.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| private readonly object myEventLock = new object(); private EventHandler myEvent;
public event EventHandler MyEvent { add { lock (myEventLock) { myEvent += value; } } remove { lock (myEventLock) { myEvent -= value; } } }
protected void OnMyEvent(EventArgs args) { lock (myEventLock) { foreach (EventHandler eventHandler in myEvent.GetInvocationList()) { ISynchronizeInvoke target = eventHandler.Target as ISynchronizeInvoke;
if ((target != null) && (target.InvokeRequired)) { target.Invoke((MethodInvoker)delegate() { eventHandler(this, args); }, null); } else eventHandler(this, args); } } } |
Ich würde trotzdem aber eher Kah zustimmen. Synchronisierung ist Aufgabe des Empfängers(hier GUI). Nur der Empfänger kann letztlich entscheiden ob eine (teure) Synchronisierung überhaupt notwendig ist.
Christoph1972 - Mo 19.01.09 18:03
OK, vielen Dank an euch. Ich werde es dann in der Main Form machen.
Gruß
Christoph
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!