我是 .net 世界的新手,所以我遇到了一些问题,请帮帮我,这是其中一个,我有一个 for 循环,我有一个 backgroundWorker 控件和一个 progressBar 控件,还有一个 id 按钮:" btnPause”。所以我的要求是当我的表单加载时,peogressbar 将显示进度它已完成多少,每当我单击按钮(btnPause)时,按钮文本需要更改并将文本设置为暂停,然后每当我再次单击该按钮,它需要从暂停的值恢复。请帮助我。
提前致谢。
我是 .net 世界的新手,所以我遇到了一些问题,请帮帮我,这是其中一个,我有一个 for 循环,我有一个 backgroundWorker 控件和一个 progressBar 控件,还有一个 id 按钮:" btnPause”。所以我的要求是当我的表单加载时,peogressbar 将显示进度它已完成多少,每当我单击按钮(btnPause)时,按钮文本需要更改并将文本设置为暂停,然后每当我再次单击该按钮,它需要从暂停的值恢复。请帮助我。
提前致谢。
我的方法是使用一个布尔标志让我知道操作是否暂停(也许第二个让我知道操作是否被取消)。当用户按下暂停按钮时,您将IsPaused
标志设置为 true,以便当工作人员开始处理下一个项目时,它可以检查此标志并知道进入等待状态。
有几种方法可以让 BackgroundWorker 保持这种暂停状态。我的方法是使用 ManualResetEvent。这允许 BackgroundWorker 线程进入睡眠状态并在设置事件时退出。我认为这比使用带有睡眠主体的 while 循环要好,因为线程在设置事件之前一直处于睡眠状态,而不是醒来检查它是否仍应处于睡眠状态。当用户希望继续时,它可以设置此事件并让后台工作人员继续。
所以代码看起来有点像这样:
private void backgroundWorker_doWork(object sender, DoWorkEventArgs args)
{
//Initialize any pre-work stuff here.
while(!finished)
{
if (Paused)
m_evtPause.WaitOne();
if (Cancelled)
break;
//lengthy thread procedure code.
}
}
尝试使用这个
class MyWorkerClass
{
volatile bool m_bPaused = false;
// Public property to control worker execution
public bool Paused
{
get { return m_bPaused; }
set { m_bPaused = value; }
}
long ThreadFunc (BackgroundWorker worker, DoWorkEventArgs e)
{
...
// While Paused property set to true
while (m_bPaused)
{
// Pause execution for some time
System.Threading.Thread.Sleep (100);
}
}
}