0

Я пытаюсь узнать, как использовать фоновых работников для моего проекта, но я продолжаю получать ошибку, и я просто не могу понять, что делать. Внутри дизайнера я создал backgroundWorker1 и кнопку.Ошибка повторного использования рабочего фонаря C#

private void btnNewSchedule_Click(object sender, EventArgs e) 
    { 
     BackgroundWorker bw = new BackgroundWorker(); 
     bw = backgroundWorker1; 
     Scheduletest(bw); 

    } 
private void Scheduletest(BackgroundWorker bw) 
    { 
    //junk code 

    //do the expensive coding part now 
     bw.RunWorkerAsync(); 

    } 

Когда я нажимаю на кнопку, чтобы запустить рабочий один раз, он отлично работает, но на второй клик, я получаю ошибку «Эта операция уже была OperationCompleted призвал его и далее призывает незаконны»

Я читал, что я должен каждый раз создавать новый экземпляр рабочего стола, и это то, что я пытался сделать с фоновой работой bw, но я предполагаю, что эта часть неверна. Может кто-то, пожалуйста, помогите мне, чтобы иметь возможность повторно использовать эту кнопку?

Большое спасибо

+0

Вы не можете повторно использовать такого работника фона, как только состояние переходит к «завершенному», это «сделано». –

+0

Вы собираетесь создавать новый поток BackgroundWorker каждый раз, когда пользователь нажимает кнопку? Или вам нужен только один поток и отключить кнопку во время ее выполнения? –

+0

@GrantWinney Я пытаюсь дать. Я читаю, что это правильный способ выполнить мою задачу. Честно говоря, я просто пытаюсь нажать кнопку и работать каждый раз. Что бы я ни делал для этого, это, в конечном счете, моя цель. Открыта для альтернатив. – metinoheat

ответ

3

То, что вы сделали действительно создать новый экземпляр, но потом вы пошли и переназначить старый.

BackgroundWorker bw = new BackgroundWorker(); 
bw = backgroundWorker1; 

Так что теперь, bw не содержит новый экземпляр, но старый экземпляр. Вот как это сделать правильно:

BackgroundWorker bw = new BackgroundWorker(); 
Scheduletest(bw); 
+0

Дело в том, что bw - просто пустой рабочий стол. тот, который я запрограммировал в дизайнере, backgroundworker1, имеет обработчики событий, которые я установил, поэтому я пытался сделать часть bw = backgroundWorker1. Есть ли способ сделать это? – metinoheat

+0

Вам необходимо переназначить обработчики событий каждый раз, когда вы создаете нового рабочего. –

+1

работал. Большое спасибо. – metinoheat

Смежные вопросы