Laden...

Daten an an eine anderen Forms-Anwendung übergeben und später Ergebnisse abholen

Erstellt von PES 4ever vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.666 Views
PES 4ever Themenstarter:in
46 Beiträge seit 2008
vor 14 Jahren
Daten an an eine anderen Forms-Anwendung übergeben und später Ergebnisse abholen

Hallo!

Ich habe eine Frage bezüglich SendKeys. Ich habe mich im Forum schon umgesehen und habe vieles gefunden. Die Suchfunktion kann ja sehr hilfreich sein. 😁

Nun habe ich eine spezielle Frage für meine Anwendung.
*Ich habe meine WinForm, die verschiedene Zahlen generiert. Die Zahlen können Primzahlen, Zahlen aus der 3er Reihe, usw. sein. *Das zweite Programm berechnet dann mit diesen Zahlen, die per SendKeys an das Rechenprogramm gesendet werden, verschiedene Ergebnisse. *Das Rechenprogramm gibt die Ergebnisse und den Rechengang dann in eine ListBox. *Jedes mal wenn ein Ergebnis in die ListBox eingefügt wird, kommt eine MessageBox. *Wenn genug Ergebnisse vorhanden sind, dann kommt keine MessageBox mehr.

Ich sende die Zahlen mit "SendKeys.Send(zahl);". Nun möchte ich das meine WinForm die Zahl an das Rechenprogramm gibt, dann auf die MessageBox wartet, OK drückt und dann den nächsten Wert versendet. Wenn die MessageBox nicht mehr erscheint, soll mein Programm stoppen.

Wie realisiert man so was? 🤔

Danke im Vorraus!

MFG PES 4ever

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo PES 4ever,

Wie realisiert man so was?

Nicht mit SendKeys 😉

Als Alternative würde ich vorschlagen, dass Du Remoting verwendest, wenn Du mit .Net 3.x arbeitest, dann WCF/Remoting. Das ist meines Erachtens der beste Weg zwischen 2 .Net Programmen innerhalb des lokalen Netzwerkes zu kommunizieren. Alternativ kannst Du auch eine herkömmliche Client/Server Verbindung via TCP/IP aufbauen.

Remoting hat den Charme, dass man geteilte Objekte hat, bei dem es möglich ist auf Events zu reagieren. Realisiert werden kann Dein Szenario dann so:

  • Rechenprogramm ist Server und managed das Remoting-Objekt
  • WinForm verbindet sich mit dem Remoting-Objekt
  • WinForm generiert Zahl und ruft Methode des Remoting-Objektes auf
  • Remoting-Objekt übermittelt die Zahl an das Rechenprogramm und wartet auf Benutzereingabe
  • WinForm bekommt erst dann wieder ein Signal, sobald die Methode auf dem Remote-Objekt sich zurückmeldet.

Wie Remoting funktioniert kannst Du mittels der Boardsuche finden. Es gibt hier zahlreiche Beispiele hierfür.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

PES 4ever Themenstarter:in
46 Beiträge seit 2008
vor 14 Jahren

Erstmal Danke! Werde ich mir mal ansehen. 😉

Gibt es mit SendKeys keine Lösung das zu realisieren. Gibt es keinen Befehl der erkennt das eine MessageBox geöffnet wurde?

SendKeys kann ja auch Tastendrücke versenden, oder?
Zum Beispiel "SendKeys.Send("%({F4})");".

Kann man so nicht auf die MessageBox reagieren (mit Enter)?

MFG PES 4ever

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo PES 4ever,

SendKeys ist nicht State-Of-The-Art. Es könnte auch sein, dass bei entsprechender Prozessorauslastung SendKeys verloren gehen. Deshalb sollte man hiervon abraten.

Ich kapier aber noch nicht, dass eine MessageBox bei jedem neuen ListBox-Eintrag aufpoppt, und ein Stopp-Signal dadurch gekennzeichnet wird, dass keine MessageBox mehr aufpoppt. Das ist doch irgendwie verkehrt herum.

Kannst Du die Logik nicht einfach umdrehen: So lange ListBox Einträge zulassen, bis genügend Zahlen vorhanden sind und dann die MessageBox aufpoppen lassen?

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

PES 4ever Themenstarter:in
46 Beiträge seit 2008
vor 14 Jahren

OK! Vielen Dank norman_timo! 👍

Ich werde mir mal das mit dem Remoting anschauen und wenn ich noch Fragen habe, werde ich sie hier posten.

Das wegen der MessageBox ist nur momentan so, dass sie jedes Mal erscheint, wenn es einen Eintrag gibt. Das war nur zu Testzwecken. Grund war der, um nach zu sehen, ob der errechnete Wert stimmt.

Andersrum ist es natürlich besser und ergibt mehr Sinn. Das werde ich noch ändern. 😉

MFG PES 4ever

[B]EDIT:[/B] Noch ne Frage und zwar:
Wenn ich SendKeys doch verwende und wir nehmen an, dass die CPU-Auslastung nicht zu hoch ist.
Gibt es überhaupt einen Befehl, der erkennt, ob eine MessageBox eines anderen Programms offen bzw. erschienen ist?
2.760 Beiträge seit 2006
vor 14 Jahren

Wenn ich SendKeys doch verwende und wir nehmen an, dass die CPU-Auslastung nicht zu hoch ist. Gibt es überhaupt einen Befehl, der erkennt, ob eine MessageBox eines anderen Programms offen bzw. erschienen ist?

Hmm... mal abgesehen davon das du das nicht willst hier etwas falls du es doch willst: System-Event --> NewWindowOpened

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo PES 4ever,

wenn du beide Anwendungen selber schreibst, dann vergiss unbedingt SendKey und das Erkennen der MessageBox. Das ist Mist und nur eine Notlösung, wenn eine der Anwendungen fest vorgegeben ist und es partout keinen anderen Weg der Kommunikation gibt.

herbivore

PES 4ever Themenstarter:in
46 Beiträge seit 2008
vor 14 Jahren

OK! Vielen Dank für eure Hilfe! 👍

Ich habe beide Programme selber geschrieben und werde sie auch vereinen, was natürlich sinnvoller ist.
Aber ich wollte einfach mal probieren, wie es anders geht. Denn bei manchen anderen Projekten kann ich das gut gebrauchen.

MFG PES 4ever

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo PES 4ever,

Aber ich wollte einfach mal probieren, wie es anders geht.

Stichwort ist Interprozesskommunikation. Da gibt es eine ganze Reihe von unterschiedlichen Möglichkeiten.

herbivore

365 Beiträge seit 2004
vor 14 Jahren

Hallo PES 4ever,

vielleicht ist das ein guter Zeitpunkt mal auf meinen NotificationService hinzuweisen. Klingt vielleicht ein wenig überdimensioniert, aber falls du dich ohnehin mit Remoting und Events beschäftigen möchtest, empfehle ich dir den Thread mal zu lesen.

NotificationService als Erweiterung zu Rainbirds ApplikationServer Beispiel

Gruß

Christoph