2011-06-08 34 views
0

我正在研究小型silverlight應用程序,以便在通過WCF服務上傳到服務器之前調整客戶端計算機上的圖像大小。我有這一切工作,客戶端連接和上傳的圖像調整大小,但應用程序的性質是,用戶顯示圖像上傳的進度指示器的某種形式,他們不能再上傳,這是有用的。多個調用的Silverlight WCF需要知道什麼時候全部完成

我想我會的電纜鋪設電話向服務Completed事件:

service.SaveImageCompleted += new EventHandler<AsyncCompletedEventArgs>(service_SaveImageCompleted); 

我想我可以簡單地得到這個工作將得到我所需要的所有呼叫的計數方式使(入圍處理圖像的數量的計數),然後就做完成事件處理中的支票:

void service_SaveImageCompleted(object sender, AsyncCompletedEventArgs e) 
    { 
     serviceCallsMade++; 

     if (totalServiceCalls == serviceCallsMade) 
     { 
      // MessageBox.Show("Transactions Complete!"); 
      IsWorking = false; 
      ProgressBarWorking.Visibility = Visibility.Collapsed; 
      UploadButton.Visibility = Visibility.Visible; 
      LayoutMessage.Visibility = Visibility.Visible; 
     } 
    } 

我遇到的問題是什麼,我認爲是最後的調用(用戶界面獲得「暢通」)在所有服務調用實際完成之前發生我正在通過提琴手看這個)。本地這個工作,但我現在認爲這是因爲它很快處理,我沒有注意到,在預生產環境中,你可以看到我的實現是託什:)。

有沒有人在那裏沒有什麼最好的方法是這樣的,這不是整個系統的重要組成部分,也不需要太過花哨,但我想給出正確的反饋,而這種編程方式(異步的東西)需要更多的時間才能進入我的腦海。

任何幫助將不勝感激。

羅布

回答

0

只要在服務器端的處理是在一個單獨的線程做這應該工作。如果你確實發生了另一個線程,那麼完成的事件可能會在實際工作完成之前完成。

+0

謝謝傑夫,有什麼特別的我必須做的才能讓服務脫離單線程嗎? – Modika 2011-06-10 08:11:32

+0

除非你強迫它不要,否則它將消除單個線程。你會知道你是否這樣做。另一種選擇是你正在使用的一些第三方代碼使用多線程。我可以肯定地看到第三方代碼使用多個線程進行圖像處理... – 2011-06-10 14:48:14

相關問題