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,其中甚至解释了进度更新。
如何从循环中的 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,其中甚至解释了进度更新。