2016-04-13 25 views
4

C# Projemde veri aldığımda Olayı beklemek istiyorum. Program bazı verileri GetData diğer program okunan bu verilerin sonunda bir etkinlik oluşturur okuduğumdaUygulamadaki Olayı Bekleyin

(EventForGetData diyoruz). Yani, okumayı bitiren EventForGetData için beklemem gerekiyor.

Bu kod için bu görevi yazdım, ancak bu kodun daha uygun yazabileceğine inanıyorum.

 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; 
     } 

cevap

1

deneyin etkinliğinizi sizin işlem yapmak sonunda, birinci Görev verilerinizi elde etmektir Görevi kullanabilir veya başlatmak için: Örnek

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

Not: Kod o sen ContinueWith içine koyacaktır StartNew yazdığınız koddan sonra yürütülür. // koymak;

+0

Üzgünüm, ama benim Örnek ... Görev Görev = Task.Factory.StartNew (() => { webBrowser.Document.InvokeScript ("") için yazmak nasıl bilmiyorum Burada ilk kodu }) kodlayın. ContinueWith ((rs) => { ScriptInterface.ForWaitGetData(); // Etkinliğinizi veya istediğiniz herhangi bir şeyi başlatın }); – askeet

+1

Eğer kodunuzu tam olarak anlayabiliyorsam, hiç bir değişkenin hiçbir anlamı yoktur, çünkü Değişken'i kullanmadığınız sürece kodunuzu bu http://pastebin.com/BTw6SZhF gibi düzenlemediniz. –

+0

Ana sorun GetData() ve EventForGetData(), bir ve aynı iş parçacığı. GetData() kullandığımda bir COM nesnesi EventForGetData() oluşturduğundan. Bu nedenle, GetData olay için beklediğinde, COM GetData() içinde beklerken Application.DoEvent() kullanmazsam EventForGetData() işlevini çağırmaz. – askeet