【问题标题】:How to Pause backgroundWorker in Windows Form如何在 Windows 窗体中暂停 backgroundWorker
【发布时间】:2012-04-12 13:20:25
【问题描述】:

我是 .net 世界的新手,所以我遇到了一些问题,请帮帮我,这是其中之一,我有一个 for 循环,我有一个 backgroundWorker 控件和一个 progressBar 控件,还有一个按钮id:“btnPause”。所以我的要求是当我的表单加载时,peogressbar 将显示进度它已完成多少,每当我点击按钮(btnPause)时,按钮文本需要更改并将文本设置为暂停,然后每当我再次单击该按钮时,它都需要从暂停的值恢复。请帮助我。

提前致谢。

【问题讨论】:

  • 请向我们展示 BackgroundWorker 代码...
  • 我认为这是重复的-在此处查看此答案stackoverflow.com/questions/10047571/…
  • 你可以尝试在一个类中封装一个后台工作者,该类也保存当前进度值。因此,当您暂停(在这种情况下是取消异步操作)时,它只会保留进度值,因此下次再次启动操作时,您可以恢复到上一个​​进度值。希望这会有所帮助。

标签: c# .net windows winforms backgroundworker


【解决方案1】:

我的方法是使用布尔标志让我知道操作是否暂停(也许第二个让我知道操作是否被取消)。当用户按下暂停按钮时,您将 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.
   }
}

【讨论】:

    【解决方案2】:

    尝试使用这个

    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);      
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      相关资源
      最近更新 更多