2017-08-04 30 views
0

我打開第二個窗口,但第二個窗口中有位處理的顯示之前做一個按鈕。而不是具有初始窗口模具,直到第二屏幕出現我想告知的處理已發生的用戶。我對如何做到這一點的想法;加載第二個窗口W/O停機首先

1)調用在第二線程的第二窗口,在所述第一窗口顯示「加載」等的UI,一旦第二窗口已經完成傳遞一個指示符到所述第一窗口停止顯示「加載」。

我讀了一些關於調度& BeginInvoke的,但仍然掙扎了一下,以得到這個工作。我嘗試了這一點,在我的窗口1初始化我有一個thread.Sleep只是爲了測試,我的主窗口仍然工作,但事實並非如此。任何幫助將不勝感激。

+0

我認爲你需要抓住一本關於WPF和C#編程的書。我覺得有太多你不知道你需要知道的印象。 –

回答

3

你不能打開窗戶和工作線程上執行其他任務的用戶界面。所有這些活動都必須在主線程中執行。

private void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // First do the work 
    Thread.Sleep(...); 
    // Then show the window 
    Application.Current.Dispatcher.Invoke(() => window1.Show()); 
} 

使用,你搶在事件處理程序的調度員可以迅速失控,併爲您的應用程序的增長,你可能要切換到這個簡單的方法:你可以通過調用調度員從後臺線程做一個更嚴格的編程模型,例如使用MVVM框架的種類。

從UX的角度來看,最好立即顯示第二個窗口,然後顯示一個進度條或微調器,指示正在執行工作。然後當工作完成時隱藏這個指標並顯示工作結果。使用調度程序從後臺線程更新UI的原則仍然適用。

+1

我其實很欣賞第二個窗口中「加載」的建議,這就是我要做的。你也澄清了調度員/工人的區別。謝謝 – windowskm