2013-10-08 84 views
1

相當新的DevExpress的,我公司使用的是9.3WaitDialogForm.ShowDialog()不處理其他代碼

卡住我有這個代碼非常小片斷:

 wait = new DevExpress.Utils.WaitDialogForm("Please wait...", "Performing SVN check"); 
     wait.Visible = false; 

     wait.ShowDialog(); 
     ParseSVNResults(CheckSVN()); 
     wait.Close(); 

我WaitDialog顯示器,但代碼永遠不會繼續。我在ParseSVNResults上放置了一個斷點,當我運行代碼時,它會到達該行。

它正常工作,如果我只是調用Show()而不是ShowDialog(),但是如果用戶在等待窗體外單擊時會導致不良行爲。應用程序「白掉」就像停止響應,鼠標變成了那個小旋轉圖標。對話框窗體顯示的小時玻璃也不旋轉。愚蠢的小細節,但它看起來像整個應用程序崩潰的最終用戶。

+1

這就是我們所說的[通過模式同步](http://thedailywtf.com/Articles/Synchronization-by-Modal.aspx),也稱爲'支持Modal的同步信號量',或** MESS ** 。 –

回答

3

ShowDialog按設計,「阻止」代碼,直到關閉對話框。這是完整的目的。

Show()導致一切變白的原因是您的工作正在UI線程中發生。處理這個問題的正確方法是通過類似BackgroundWorkerTask的方式將您的工作(ParseSVNResults)轉換爲後臺線程。

+0

謝謝,我會檢查它的BackgroudnWorker類。 .NET 3.5 so任務不是一個選項。 – sab669