Я сделал фоновый рабочий в своем окне, и он прекрасно работает.Код начинает становиться длинным, поэтому я решил создать рабочий класс и поместить всю свою логику туда.Однако, когда я это делаю, я больше не могу изменять значение моего индикатора выполнения.
Я получаю «не существует в текущем контексте».Интересно, это как-то связано с тем, что это в отдельном потоке ??Я также исследовал это, и я не нашел объяснения или решения.
Я сделал свой индикатор прогресса в XAML общедоступным, но это не имело никакого значения.
Вот мой код основного окна.Здесь нет проблем, которые я вижу.
using System;
using System.Collections.Generic;
using System.Windows;
using Microsoft.Win32;
using Market.BI.Workers;
namespace Market
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
File_Worker my_worker = new File_Worker();
}
}
}
Вот код для моего класса.Здесь я не могу получить доступ к элементу управления индикатором выполнения.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
namespace Market.BI.Workers
{
class File_Worker
{
private BackgroundWorker worker = new BackgroundWorker();
void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Stuff
}
void Worker_DoWork(object sender, DoWorkEventArgs e)
{
Stuff
}
void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Stuff
}
//Method
public File_Worker()
{
worker.DoWork += new DoWorkEventHandler(Worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(Worker_ProgressChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Worker_RunWorkerCompleted);
worker.WorkerReportsProgress = true;
worker.RunWorkerAsync();
fileProgressBar.IsIndeterminate = false;
}
}
}