Я новичок в идее BackgroundWorkers, так что это меня немного озадачивает.Переменная класса, заданная BackgroundWorker, не сохраняется.
Так что я создал новое приложение WPF и создал переменную BackgroundWorker и список класса:
public partial class MainWindow : Window
{
private BackgroundWorker bw = new BackgroundWorker();
private List<int> tempList = new List<int>();
...
Затем я использую BackgroundWorker для заполнения этого списка: (в том же классе BTW)
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
Random r = new Random();
for (int j = 1; j <= 100; j++)
{
for (int i = 0; i < 1000; i++)
{
tempList.Add(r.Next(100));
}
...
}
}
Теперь вот часть, которая меня достает ...
Код, который заполняет этот список, кажется, работает нормально. Когда я выполняю его выполнение, * он ведет себя так, как я предполагал, до момента, когда код выходит из метода bw_DoWork. * После этой точки возвращается в пустой список. Я изменил список на статический в одной точке, но ничего не изменилось.
Так почему же этот список не сохраняется во время выполнения программ?
Я был уверен, что это проблема с тем, что список выделяется в разных областях памяти для каждого потока, но я просто слишком мало знаю о BackgroundWorker и MultiThreading в целом, чтобы самому диагностировать его.
Любая помощь будет оценена по достоинству.
Я бы передать список в качестве объекта арг или создать его в 'do_work', как вы оставите себя открытым, чтобы пересечь поточную проблему в настоящее время – DGibbs
Могла вы проверяете, будет ли этот список также пустым в обработчике событий RunWorkerCompleted? – Douglas
Что Дуглас сказал, также является «RunWorkerEventArgs.Error» возвратом null или ошибкой? – Sayse