gpt4 book ai didi

c# - 后台工作人员中的暂停/恢复循环

转载 作者:太空狗 更新时间:2023-10-29 21:14:11 24 4
gpt4 key购买 nike

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

我刚用过这个Code但它不会在暂停后恢复。

在主类中我使用这个

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

然后在 My Start Click 中我写了这个:

      if (!backgroundWorker1.IsBusy)
{
MessageBox.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();
}
}

关于c# - 后台工作人员中的暂停/恢复循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com