C# Kommunikation zwischen zwei Programmen

Mathias09876

Ensign
Registriert
Nov. 2010
Beiträge
237
Hallo zusammen,

ich habe hier zwei Programme, eines stammt von mir, das andere ist Freeware aus dem Internet. Was ich nun benötige ist eine Kommunikation zwischen den beiden Programmen, allerdings nur einseitig, das heißt mein Programm soll auf Informationen aus dem Freeware Programm reagieren.
In dem Freeware Programm habe ich die Möglichkeit bei bestimmten Ereignissen eine externe Anwendung zu starten und ihr, mit Hilfe von Parametern, Informationen zukommen zu lassen.
Diese Informationen benötige ich nun ich meiner C# Anwendung. Beide Programm sollen später durchgehend parallel laufen.
Bei den Informationen handelt es sich um einen oder zwei Strings.

Meine Frage wäre jetzt, wie lässt sich so eine Kommunikation am geschicktesten realisieren? Bisher sind mir folgende Möglichkeiten eingefallen:

1) Ich starte aus der Freeware Anwendung eine von mir geschriebene Anwendung, die die Informationen in eine Textdatei oder Datenbank schreibt und aus meiner eigentlichen C# Anwendung polle ich einfach, wann sich an der Datenbank/Textdatei etwas tut

2) Ich starte eine selbstgeschriebene Anwendung, die in der Lage ist direkt mit meiner Hauptanwendung zu kommunizieren als Stichwort habe ich hier "named pipes" gefunden.
Das würde mir, so hoffe ich zumindest ein ewiges pollen ersparen?

Momentan kann ich leider noch nicht einschätzen, in welchem Intervall die Informationen kommen, eine weitere Frage wäre deshalb welche minimalen Intervalle wohl mit den beiden Möglichkeiten möglich sind? Geplant war, dass sich die Hilfsanwendung jedes mal wieder beendet, damit sie auch wieder neu von dem Freeware Programm aufgerufen werden kann.

Wie würdet Ihr das Problem lösen? Über eine Datenbank oder über diese Pipes (von denen ich allerdings noch keine Ahnung habe).

Hoffe Ihr könnt mir weiterhelfen :)

Grüße
Mathias
 
Zu 1)
Denkbar schlechteste Lösung. Aber das weißt du sicher selber. ;)

Zu 2)
Named Pipes sind eine gute Idee. Im Grund ist das ein Kanal, in dem du Nachrichten reinschreiben kannst und der am anderen Ende auf sie reagieren kann. Pipes sind bidirectional, die Nachrichtenübermittlung geht also in beide Richtungen. Und es muss kontinuierlich überprüft werden, ob eine Nachricht da ist.


Ich würde auf Signale setzen. Die sind unidirektional (gehen also nur in eine Richtung - genau das, was du haben willst). Wie das konkret in C# umgesetzt wird, kann ich aber nicht sagen. Ich vermute stark, dass man hier auf das Event-System setzen muss.
 
Du könntest das ja so verpacken, dass dein Hauptprogramm erstmal prüft ob es parameter bekommen. Wenn ja macht er zuerst irgendwas mit den Strings. Wenn nicht, dann läuft das Programm gleich an?!

Ein bisschen mehr Infos wären vielleicht nicht schlecht. Läuft das Hauptprogramm denn immer?
Das Pollen ist zwar wohl am einfachsten, aber wirklich nicht schön (je nach Umfang kann das aber zB auch jedes Sekunde geschehen, aber das ist wirklich, wirklich nicht schön...)
 
Ja die Möglichkeit 1) gefällt mir jetzt auch nicht unbedingt so gut ^^ vor allem, da ich ca alle 10 Sekunden pollen müsste.

Zu mehr Informationen:
Das Programm ist für die örtliche freiwillige Feuerwehr, in meinem Hauptprogramm werden Informationen zum aktuellen Einsatz angezeit. Zu diesen Informationen gehören auch die Alarmieren Einheiten und die aktuellen Zustände der Fahrzeuge (Bsp: Auf dem Weg zum Einsatz, Einsatz an, etc). Da es mir zu aufwendig ist selbst ein Programm zu schreiben, das in der Lage ist diese Meldungen am Funk zu decodieren wollte ich auf ein bestehendes (in meinem Fall BosMon) zurückgreifen.
Bei einem neuen Einsatz sollten diese Informationen also möglichst zeitnah in meinem Hauptprogramm zur Verfügung stellen (=> pollen echt nicht die Traumlösung).
Das Hauptprogramm sowie das Dekodierprogramm sollen beide durchgehend laufen. Von mir geplant war, dass eben nur das Hilfsprogramm bei bedarf gestartet wird und für eine Informationsübertragung an das Hauptprogramm sorgt.

Hoffe ich habe das verständlich beschreiben können ^^

Grüße
 
Zuletzt bearbeitet: (Rechtschreibfehler (ich weiß ich hab bestimmt immernoch ein paar übersehen))
Also für sowas wirklich kein Polling...

Einsatzgebiet hört sich gut an :) Habe mal überlegt sowas in etwa zusammenzubauen, da bei uns hier niemand die Sirene hört (Außer man steht draußen und lauscht gespannt). Wobei es mir einfach nur wichtig gewesen wäre, dass jeder Nutzer einen Alarm auslösen kann und die anderen Nutzer die gerade das Programm gestartet haben benachrichtigt werden. Hab ich bis heute aber noch nicht gemacht^^

Wie du das ganze aber in C# umsetzen kannst weiß ich auch nicht...
Würde halt im Hauptprogramm auf irgendeinem Port lauschen und das mit dem anderen draufschieben. Aber wie, das weiß ich auch nicht^^
 
Zurück
Oben