C# 从第一个开始更新第二个 Window

C# Update Second Window from first

如何从循环中的 MainWindow 中更新第二个 Window(这是一个简单的 WPF Window,带有进度条以显示进度)?

好吧,我正在加载几个文件,这可能需要大约 10 秒。加载时我希望我的 ProgressWindow 显示已加载了多少文件。

这是我的主线程:

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();
    }

这是进度Window控制器

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;
    }
}

我读到我应该通过线程来完成它,但我无法让它工作,而且我发现的所有帮助其他人的代码都没有满足我的需要。

感谢您的帮助

你的问题提错了。您正在根据您的问题更新第二个 window,但是使用单独线程的建议建议才是您真正要问的。

我建议阅读 BackgroundWorker class Here,其中甚至解释了进度更新。