我怎么能每5分钟检查一次,并在需要时中断检查

本文关键字:检查 一次 中断 怎么能 5分钟 | 更新日期: 2023-09-27 18:15:07

在mainpage . example .cs中我创建了一个BackgroundWorker。这是我的代码:

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            bgw = new BackgroundWorker();
            bgw.WorkerSupportsCancellation = true;
            bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
            bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
            bgw.RunWorkerAsync();
        }
        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            bgw.CancelAsync();
            base.OnNavigatedFrom(e);
        }
        void bgw_DoWork(object sender, DoWorkEventArgs e)
        {
            if ((sender as BackgroundWorker).CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            Thread.Sleep(1000*60*5); // 5 minutes
        }
        void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled || (sender as BackgroundWorker).CancellationPending)
                return;
        /* the work thats needed to be done with the ui thread */
        (sender as BackgroundWorker).RunWorkerAsync();
    }

但这不起作用。如何在导航到另一个页面时正确地停止后台工作程序?

我怎么能每5分钟检查一次,并在需要时中断检查

创建一个信号,例如ManualResetEvent

ManualResetEvent _evStop = new ManualResetEvent(false);

不是执行Thread.Sleep(),而是等待您的事件对象所需的"延迟"时间。

_evStop.WaitOne(1000*60*5, false);

当你想提前停止处理时,在你的事件对象上触发信号。

_evStop.Set();

当事件发出信号时,WaitOne将提前返回。否则,它将在指定的时间后超时。