У меня проблема с ProcessChanged. Он запускается в коде (когда я смотрю в отладчик), но он не обновляется на моем главном экране, где находится индикатор выполнения.
Инициализация BackgroundWorker
private void Import_Click(object sender, RoutedEventArgs e)
{
progressbarImport.Value = 0;
int max = DatagridZegrisWeekImport.Items.Count;
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.ProgressChanged += worker_ProgressChanged;
worker.WorkerReportsProgress = true;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.RunWorkerAsync();
}
The DoWork
void worker_DoWork(object sender, DoWorkEventArgs e)
{
var manager = new ZegrisReadToDB();
int progressPercentage = 0;
int max = DatagridZegrisWeekImport.Items.Count;
for (int i = 0; i < max; i++)
{
this.Dispatcher.Invoke(() =>
{
DatagridZegrisWeekImport.SelectedIndex = i;
var selecteditem = DatagridZegrisWeekImport.SelectedItem as ZegrisWeekDataImport;
string exist = manager.CheckExist2(selecteditem.Artikelnummer, selecteditem.Jaar);
if (exist == "")
{
insert statement;
progressPercentage = Convert.ToInt32(((double)i / max) * 100);
(sender as BackgroundWorker).ReportProgress(progressPercentage);
Thread.Sleep(100);
}
else
{
update statement
progressPercentage = Convert.ToInt32(((double)i / max) * 100);
(sender as BackgroundWorker).ReportProgress(progressPercentage);
Thread.Sleep(100);
}
});
}
}
The ProgressChanged
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Application.Current.Dispatcher.Invoke(() =>
this.progressbarImport.Value = e.ProgressPercentage);
}
Как видите, я уже пробовал несколько решений, найденных на этом форуме, но, похоже, ни одно из них не работает. Я впервые использую BackgroundWorker, и где-то я потерял ход мыслей.