Как я могу обновить второе окно (это простое окно WPF с индикатором прогресса, чтобы показать прогресс) изнутри моего MainWindow внутри цикла?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 должны делать это с помощью резьбы, но я не могу заставить его работать, и весь код, который я нашел, который помогал другим людям, не работает Я делаю то, что мне нужно.
Спасибо за вашу помощь
вы можете использовать шаблон [MVVM] (https://en.wikipedia.org/wiki/Model_View_ViewModel). у вас есть один общий ViewModel. Mainwindow обновляется, и SubWindow просто показывает данные. – Jens
также вы можете добавить событие в общую область – ZSH
Ну, я думал, что смогу сделать это без шаблона MVVM, потому что это всего лишь небольшой фрагмент кода и приносит еще некоторую сложность, это не хорошо –