Я работаю над проектами, которые нужно выполнить с помощью потока.C# BackgroundWorker Wait До окончания
У меня есть работник фона, который выполняет эту работу. То, что я хочу сделать, - это когда я нажму Button3
, мой фоновый рабочий перезапустится. Я уже пытался подождать, пока фоновый работник закончит с Backgroundworker1.IsBusy
, но это никогда не заканчивается. Когда я ударил Button3
, я получаю ошибку
Это BackgroundWorker в настоящее время занят и не может запускать несколько задач одновременно
Это мой код:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void button2_Click(object sender, EventArgs e)
{
backgroundWorker1.CancelAsync();
}
private void button3_Click_1(object sender, EventArgs e)
{
backgroundWorker1.CancelAsync();
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
int x = 0, y = 0, result;
while (true)
{
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
break;
}
else
{
x++;
y++;
result = x + y;
this.label1.Invoke(new MethodInvoker(() => this.label1.Text = result.ToString()));
}
}
}
}//public partial class Form1 : Form
Примечание: вам нужно только перезагрузитьOnCancel, если вы планируете отменять работу без перезапуска задания. Если cancel означает, что вы всегда перезапускаете задание, вы можете просто удалить все файлы restartOnCancel. –
True - я предположил из примера, что, поскольку кнопка1 запускается, кнопка2 отменяет, а кнопка3 перезапускается, что это необходимо - но если они были только для тестирования, и вы действительно просто хотите перезапустить каждый раз, вы можете удалить части restartOnCancel. – Deeko
Спасибо, что сделал трюк. Я просто добавил, если (! BackgroundWorker1.IsBusy) { backgroundWorker1.RunWorkerAsync(); } в button3, чтобы я мог начать работу там. Большое спасибо – oimitro