gpt4 book ai didi

c# - 如何暂停和恢复 BackgroundWorker?

转载 作者:太空狗 更新时间:2023-10-29 22:33:20 25 4
gpt4 key购买 nike

这就是我在代码中的做法:在 backgroundWorker DoWork 事件中我做了:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
_busy.WaitOne();
this.Invoke(new MethodInvoker(delegate { label2.Text = "Website To Crawl: "; }));
this.Invoke(new MethodInvoker(delegate { label4.Text = mainUrl; }));
webCrawler(mainUrl, levelsToCrawl, e);


}

然后在暂停按钮点击事件中我做了:

private void button4_Click(object sender, EventArgs e)
{
_busy.Reset();
}

在恢复按钮点击事件中我做了:

private void button5_Click(object sender, EventArgs e)
{
_busy.Set();
}

但是当我点击开始这个过程时它不工作:

private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
button1.Enabled = false;
this.Text = "Processing...";
label6.Text = "Processing...";
label6.Visible = true;
button2.Enabled = false;
checkBox1.Enabled = false;
checkBox2.Enabled = false;
numericUpDown1.Enabled = false;
button3.Enabled = true;
}

只有当我单击恢复按钮时,进程才会开始,然后当我单击暂停按钮时,什么也不会发生。

我希望当我点击启动进程按钮时,它会定期启动 backgroundWorker,然后当点击暂停按钮时,它会暂停,而当点击恢复按钮时,它会恢复。

我做错了什么?有人可以修复我的代码吗?

最佳答案

在您的 BackgroundWorker 线程代码中,您需要找到可以安全“暂停”执行的地方。 ManualResetEvent 是正确的编码方式。另一篇文章可能会有所帮助: Is there a way to indefinitely pause a thread?

基本上,在您的工作线程代码中您想允许它暂停的几个选择点,尝试插入:

_busy.WaitOne(Timeout.Infinite);

当你想暂停(从你的主线程)你使用:​​

_busy.Reset();

然后继续:

_busy.Set();

关于c# - 如何暂停和恢复 BackgroundWorker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12780329/

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