| 

.NET C# Java Javascript Exception

2
Hallo,

Ich steuere über eine API ein Fremdprogramm

Wenn beim "Connect" das externe Programm noch nicht geladen ist, wird dies automatisch gestartet. Das Programm kann mir über ein Event sagen, wann es "bereit" ist.
In einer Schleife warte ich auf dieses Ereignis.
Als Verzögerung hatte ich bisher das Thread.sleep(1000) benutzt.

Wenn ich es "aufrufe" und das Programm ist bereits geladen, habe ich kein Problem.
Sofort kommt das OK. Mein Eventhandler setzt ein Property zurück und mein normaler Programmablauf kann fortgesetzt werden, sprich: die Kommunikation mit der API.

Das Problem ist aber, wenn das Programm noch nicht gestartet wurde, dann wird dies von meinem API-Befehl erledigt, was dann einige Zeit dauert.
Ich hatte nun erwartet, dass mein Programm in den "Sleep-Modus" geht, die Prozessorzeit dann an mein aufzurufendes Programm gehen könnte und somit Zeit zum Laden bekommt.

Tut es aber nicht !! Es sieht eher so aus, als ob auch das Fremdprogramm in den "Sleep-Modus" geht.
Letztendlich passiert nichts.

Hoffe, jemand kennt eine Lösung
Vielen Dank
News:
27.08.2011
Manfred 71 1 5
1
Moin,
kann man steuern, wo das Event landet, dass von der Applikation gesendet wird? Um welche Art von Event handelt es sich denn überhaupt?
Andreas
ABarchfeld 28.08.2011
4 Antworten
2
Wenn Du ein normales Event empfangen kannst, wozu brauchst Du dann eine Warteschleife? Nach dem Aufruf von "Connect" (und Ende der Prozedur, in der das passiert) wartet Dein Programm doch automatisch auf irgendwelche Events. Wenn dann das Event von diesem anderen Programm ausgelöst wird, kannst Du in der zugehörigen Event-Prozedur reagieren und das machen, was Du machen willst.
Nichts für ungut, aber Deine Frage klingt ein wenig danach, als wäre Dir das Prinzip von Events nicht ganz klar.
29.08.2011
SelectCase 31 1
1
Hallo,

kannst Du Dich bei Deiner API nicht für de Events "registrieren"? Oft gibt es eine Methode Connect() und dazu das passende Event Connected. Vor dem Verbinden gibst Du an, mit welcher Methode es weitergehen soll. Wenn das Event kommt, machst Du einfach da weiter. Ggf. musst Du noch einen TimeOut berücksichtigen , etc.

Beispiel (C#):
void ConnectToAPI()
{
myAPI = new API();
myAPI.Connected += new EventHandler(myAPI_Connected);
myAPI.Connect();
}


void myAPI_Connected(object sender, EventArgs e)
{
// Hier kannst Du nun mit Deinem Ablauf weiter machen.
// Ggf. musst Du aufpassen, dass Du Dich hier in einem
// anderen Threadkontext befindest.
}
29.08.2011
Xantiva 2,3k 2 9
0
Ich rufe eine Funktion "Connect" auf und wenn das Programm gestartet ist, schickt es ein Event "started", was ich mit einem normalen EventHandler unter VB.Net abfangen kann.
Soweit funktioniert es ja auch.

Übrigens: Wenn ich mein Programm im Debugger laufen lasse und in der Warte-Schleife ein Breakpoint setze, dann kann das Fremdprogramm vollständig gestartet werden und schickt mir ein "started". Ich brauche im Debugger nur ein wenig zu warten, dann den Programmlauf fortzusetzen, schon empfange ich das "started" und die Sache geht korrekt weiter.

Ich brauche also irgend eine "Warte"-Möglichkeit wie beim DebuggerBreak.

Vielen Dank
Manfred
28.08.2011
Manfred 71 1 5
Hast Du mal ein passendes Stück Code?
ABarchfeld 29.08.2011
0
Hallo Xantiva,

Danke für deine Antwort.

Der 1.Teil deines Sources sieht eigentlich genauso aus, wie ich ihn geschrieben habe.
Ich wollte eigentlich im Eventhandler meine Aktion nicht weiterführen.
Der Benutzer klickt ein Button und möchte eigentlich auf das andere Programm switchen (ich soll im nur vorher schon paar Daten dort berechnen und bereitstellen.) Er wartet also, bis ich fertig bin.

Aber genaugenommen ist dein Vorschlag die sauberste Sache.

Ich probiere es morgen aus - Wenn`s funktioniert (davon gehe ich aus), wäre meine Frage erledigt.

Manfred
29.08.2011
Manfred 71 1 5

Stelle deine .net-Frage jetzt!