當我要運行長時間操作我想顯示模式對話框窗口(等待窗口)WPF等待窗口
我想顯示此等待窗口在不同的線程中的ShowDialog()
進入沒過多久運行的操作,我將顯示模式對話窗口
與長期運行的操作完成後,我將關閉此模式對話窗口
我知道的,而不是在另一個線程創建窗口,我們可以簡單地移動長在肛門運行代碼線程但在我的代碼中的影響是沉重的。
請建議我該
當我要運行長時間操作我想顯示模式對話框窗口(等待窗口)WPF等待窗口
我想顯示此等待窗口在不同的線程中的ShowDialog()
進入沒過多久運行的操作,我將顯示模式對話窗口
與長期運行的操作完成後,我將關閉此模式對話窗口
我知道的,而不是在另一個線程創建窗口,我們可以簡單地移動長在肛門運行代碼線程但在我的代碼中的影響是沉重的。
請建議我該
首先的一個解決方案,我的建議是從UI線程中刪除「長時間運行的操作」。
這就是說,這裏有一篇文章討論你試圖做什麼。
http://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-threads/
下面的代碼給出:
Thread thread = new Thread(() =>
{
Window1 w = new Window1();
w.Show();
w.Closed += (sender2, e2) =>
w.Dispatcher.InvokeShutdown();
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
您創建一個新的調度程序將處理在新線程的UI消息和事件。附加的Closed事件處理程序確保創建的分派器在關閉表單後不會繼續運行,從而使應用程序永遠不會運行。
我建議你避免使用WinForms-smell解決方案,如ShowDialog()
調用。 看一下開箱即用的WPF ToolKit BusyIndicator,它可以充分利用WPF和XAML的強大功能和靈活性。
BusyIndicator讓應用程序 忙時讓用戶很容易知道。只需在 BusyIndicator控件的實例中包裝相關內容,並在 任何長時間運行的過程期間將其IsBusy屬性切換爲True。
它允許創建自定義等窗口,例如:
你有UI佈局的全面控制,並可以定義自己的DataTemplate:
<extToolkit:BusyIndicator IsBusy="True" DisplayAfter="0">
<extToolkit:BusyIndicator.BusyContentTemplate>
<DataTemplate>
....
更多見Extended WPF Toolkit BusyIndicator例子和下載。
感謝您提供解決方案。
其實我使用.net 3.5框架多數民衆贊成的原因不能使用繁忙的指標。
我所做的是:根據第一個解決方案,我爲長時間運行的進程創建了後臺工作器,並在等待窗口中使用了ShowDialog()。
感謝你們爲我提供可能的方式來實現我的目標
Milind
擴展WPF工具包中的BusyIndicator也可用於.NET 3.5。 –
@Milind:Brian Lagunas對,你也可以在3.5中使用BusyIndicator – sll
你們是不是要防止用戶長時間運行的操作過程中訪問你的應用程序UI的休息嗎? –