C# · 12月 26, 2021

c# – 后台工作程序中的暂停/恢复循环

我在Winform应用程序中的后台工作器中有一个循环.

我刚刚使用了这个Code,但暂停后它不会恢复.

在主类我使用这个

System.Threading.ManualResetEvent _busy = new System.Threading.ManualResetEvent(false);

然后在我的开始点击我写了这个:

if (!backgroundWorker1.IsBusy) { Message@R_521_2419@.Show(“Not Busy”); //Just For Debugg _busy.Set(); Start_Back.Text = “Pause”; backgroundWorker1.RunWorkerAsync(tempCicle); } else { _busy.Reset(); Start_Back.Text = “Resume”; } btnStop.Enabled = true;

然后在backgroundworker doWork中我写了这个:

private void backgroundWorker1_DoWork(object sender,DoWorkEventArgs e) { m_addTab addTabsInvoke = addTabUrl2; Invoke(addTabsInvoke,”http://www.google.com”); foreach (something) { _busy.WaitOne(); if (backgroundWorker1.CancellationPending) { return; } if (tabs.Invokerequired) { …… ……

我不明白为什么暂停工作,而简历不起作用.我错了什么?

解决方法 我猜你想要的最好的猜测: void ResumeWorker() { // Start the worker if it isn’t running if (!backgroundWorker1.IsBusy) backgroundWorker1.RunWorkerAsync(tempCicle); // Unblock the worker _busy.Set();}void PauseWorker() { // Block the worker _busy.Reset();}void CancelWorker() { if (backgroundWorker1.IsBusy) { // Set CancellationPending property to true backgroundWorker1.CancelAsync(); // Unblock worker so it can see that _busy.Set(); }}