2013-10-08 44 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