2016-04-13 5 views
4

Ich möchte auf Ereignis warten, wenn ich Daten in meinem C# -Projekt bekomme.Warteereignis in der Anwendung

Wenn das Programm einig Daten lesen GetData anderes Programm erstellt ein Ereignis am Ende der Daten lesen (Call EventForGetData). Also muss ich auf EventForGetData warten, die den Lesevorgang beenden.

Ich habe diesen Code für diese Aufgabe geschrieben, glaube aber, dass dieser Code möglicherweise optimaler schreiben würde.

 public static bool WaitEvent = true; 
     public void EventForGetData(string variable) 
     { 
      WaitEvent = false; 
     } 

     public static string ForWaitGetData() 
     { 
      WaitEvent = true; 
      while (WaitEvent) 
      { 
       System.Threading.Thread.Sleep(5); 
       Application.DoEvents();     
      } 
      return Variable; 
     } 

     public object GetData(){ 
      // start read data 
       ... 
      // Wait for finish to read data 
      ForWaitGetData(); 

     // finish read data 
       ... 
      return MyObject; 
     } 

Antwort

1

Versuchen zu verwenden Aufgabe die erste Aufgabe ist es, Ihre Daten zu bekommen, am Ende tun, um Ihre Verarbeitung oder starten Sie Ihre Veranstaltung: Beispiel

Task task = Task.Factory.StartNew(() => 
      { 
       //put you code here the first one 
      }).ContinueWith((rs) =>{ 
       //Launch your event or anything you want 
      }); 

Hinweis: Der Code, den Sie wird in den ContinueWith eingefügt wird nach dem Code ausgeführt, den Sie in der StartNew schreiben.

+0

Sorry, aber ich weiß nicht, wie es für mein Beispiel schreiben ... Task-task = Task.Factory.StartNew (() => { webBrowser.Document.InvokeScript (""); // setzen Sie kodieren hier die erste }). ContinueWith ((rs) => { ScriptInterface.ForWaitGetData(); // Starten Sie Ihre Veranstaltung oder alles, was Sie wollen }); – askeet

+1

Wenn ich Ihren Code vollständig verstehe, warum haben Sie Ihren Code nicht so organisiert http://pastebin.com/BTw6SZhF, solange Sie nicht Variable verwenden, da die Rückgabe keine Zuweisungsvariable keinen Sinn haben. –

+0

Hauptproblem ist GetData() und EventForGetData() es ist ein und derselbe Thread. Weil ein COM-Objekt EventForGetData() generiert, wenn ich GetData() verwende. Wenn GetData auf Event wartet, ruft COM daher die Funktion EventForGetData() nicht auf, wenn ich Application.DoEvent() nicht verwende, während es in GetData() wartet. – askeet

Verwandte Themen