2015-11-10 76 views
0

我怎樣才能更新第二個窗口(這是一個簡單的WPF窗口與進度條來顯示進度)從我的主窗口內循環?C#從第一個更新第二個窗口

嗯,我加載了幾個文件,可以花費大約10秒。加載時,我想我的ProgressWindow顯示已加載的文件數量。

這裏是我的MainThread:

private void loadFiles(String[] paths) { 

     // Show Progress Window 
     MyProgressWindow progWindow = new MyProgressWindow(); 
     progWindow.ShowProgressWindow(0, paths.Length); 
     //Globals.MyProgressController.ShowProgressWindow(0, paths.Length); 

     foreach (String path in paths) { 

      // Load the file 
      loadFile(path); 

      // Refresh the Table 
      refreshTableAsync(); 

      // Update Progress Window 
      progWindow.UpdateProgressWindow(1); 
      //Globals.MyProgressController.UpdateProgressWindow(1); 
     } 

     // Close Progress Window 
     progWindow.CloseProgressWindow(); 
     //Globals.MyProgressController.CloseProgressWindow(); 
    } 

這裏是ProgressWindowController

public class MyProgressWindow { 
    private ProgressWindow progressWindow; 

    public void ShowProgressWindow(int startIndex, int maxIndex) { 
     progressWindow = new ProgressWindow(); 
     progressWindow.Initialize(startIndex, maxIndex); 
     progressWindow.Show(); 
    } 

    public void UpdateProgressWindow(int value) { 
     progressWindow.Update(value); 
     //progressWindow.Update(); 
    } 

    public void CloseProgressWindow() { 
     progressWindow.Close(); 
    } 
} 

最後的ProgressWindow本身:

public partial class ProgressWindow : Window { 

    private int actualValue = 0; 
    private int maxValue = 0; 

    public ProgressWindow() { 
     InitializeComponent(); 
    } 

    public void Initialize(int startValue, int maxValue) { 
     this.actualValue = startValue; 
     this.maxValue = maxValue; 
    } 

    public void Update(int value) { 
     actualValue += value; 
     lblPercentage.Content = actualValue + "/" + maxValue; 
     pbProgress.Value = ((double)value/maxValue) * 100; 
    } 
} 

我已閱讀thati應通過線程做,但我無法實現它,而且我找到的所有幫助其他人的代碼都沒有不要做我需要的東西。

感謝您的幫助

+0

您可以使用[MVVM](https://en.wikipedia.org/wiki/Model_View_ViewModel)模式。你有一個共同的ViewModel。主窗口正在更新,SubWindow只顯示數據。 – Jens

+0

也可以在公共區域添加活動 – ZSH

+0

嗯,我認爲我可以在沒有MVVM模式的情況下這樣做,因爲它只是一個小小的代碼片段,並且帶來一些更復雜的並不好 –

回答

1

你的問題是不正確造成。根據您的問題,您正在更新第二個窗口,但使用單獨線程的建議建議是您真正想問的。

我建議您閱讀BackgroundWorkerHere,它甚至解釋了進度更新。

相關問題