2015-11-10 99 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,它甚至解释了进度更新。

相关问题