Ich entwickle eine WPF-Anwendung in C# und kommuniziere mit einem seriellen Gerät. Momentan zeige ich im Hauptfenster meiner Anwendung einige Informationen an, die ich durch periodisches Lesen von Zeilen vom seriellen Gerät erhalte.Anwendungsbreite serielle Schnittstelle
Manchmal muss ich ständig Daten vom seriellen Gerät in einer Datei empfangen und speichern. Ich stoppe andere Methoden, die den seriellen Anschluss verwenden (wie derjenige, der regelmäßig Zeilen liest, um im Hauptfenster angezeigt zu werden), so dass der Aufzeichnungsprozess nicht gestört wird. Es kann mühsam sein, den Zugriff auf den seriellen Port über die Anwendung hinweg zu verwalten, und so ist "System.UnauthorizedAccessException" nicht ungewöhnlich.
In jeder Methode oder Fenster in der Anwendung, die das serielle Gerät verwendet, definiere ich eine neue serielle Schnittstelle, öffne sie, lese Zeilen und schließe sie dann und entsorge sie. Ich habe jedoch gelesen, dass es eine gute Methode ist, den seriellen Port zu öffnen, wenn die Anwendung gestartet wird, und ihn zu schließen, wenn die Anwendung geschlossen wird, und ich sehe, warum dies hilfreich ist, wohin ich mit dieser Anwendung komme. Ich habe jedoch einige Fragen:
- Wo sollte ich das serielle Port-Objekt definieren?
- Wenn ich das serielle Port-Objekt aus mehr als einem Fenster oder Methode aufrufen, erstelle ich mehr als eine Instanz des seriellen Port-Objekts? Können Sie mehr als eine Instanz eines seriellen Anschlussobjekts für nur einen physischen seriellen Anschluss haben?
- Wenn ich SerialPort.ReadLine() von zwei verschiedenen Methoden (auf zwei verschiedenen Threads) aufgerufen hätte, würde eine Zeile zu einer Methode und dann die nächste Zeile zu der anderen Methode gehen und so wiederholen? Wie kann ich alle seriellen Daten an beide weitergeben?
könnten Sie bitte näher auf das Erstellen einer separaten Klasse für die serielle Schnittstelle und wie ich ein Singleton aus dieser Klasse und injizieren Sie es, wo immer in der Anwendung benötigt. Oder wenn Sie irgendwelche Links zu relevanten Dokumenten über das, was ich gerade erwähnt habe, oder über Rx haben. Wie wird der erste von Ihnen bereitgestellte Code verwendet? – thoward
@thoward Ausarbeitung hinzugefügt. –
Danke @IanMercer. Wie wäre es mit dem Abrufen der Zeichenfolge, nachdem ich die Subskriptionsanweisung habe? Ich bemühe mich, ein solches Beispiel zu finden, um mir einen Hinweis zu geben. Auch muss ich es eine "heiße" Observable wie in [diesem Link] (https://msdn.microsoft.com/en-us/library/hh242977 (v = vs.103) .aspx) machen, so dass Abonnenten auf verschiedene Threads erhalten die gleiche Zeichenfolge zur gleichen Zeit? – thoward