0

我的 .NET 后台工作程序中运行了一个 while 循环。我想在 Timers.Timer 达到 0 时结束循环。

问题是,由于我在另一个线程(后台工作人员)中工作,我的计时器必须在同一个线程中实例化。所以我不能设置任何私有布尔timer_Elapsed。我也不知道如何提供布尔 thro 事件的参考。

代码示例:

private bool timer_Elapsed = false;

    private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        Set_Timer(timer);

        timer.Start();

        while(timer_Elapsed) //Has to be a boolean that indicates if timer elapsed
        {
            this.Do_Proces();
        }
    }

    private void Set_Timer(System.Timers.Timer timer)
    {
        timer.Interval = 200;
        timer.Elapsed += new ElapsedEventHandler(timer_ElapsedEvent);
    }

    private void timer_ElapsedEvent(object source, ElapsedEventArgs e)
    {
        timer_Elapsed = true; //I can't set my private boolean since it got instantiated in another thread
    }

代码中的特殊问题。我是这种东西的新手。有什么建议么?提前致谢

编辑:澄清一下,我希望 Do_Proces() 运行 200 毫秒,当那个时间过去时,我希望它停止。当它在 200 毫秒后停止时,我想用 backgroundWorker 中生成的数据更新 GUI。然后检查用户是否希望进程停止,如果不是,我希望它再次运行。我使用计时器,因为线程必须重新启动很多,这也会影响主线程,影响用户体验不好。

4

1 回答 1

4

除了此处列出的以外,计时器是否还有其他用途?如果没有,您可能只想在 BackgroundWorker 方法的开头记录当前时间,并更改 while 循环上的条件以检查所需的时间是否已过。

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    TimeSpan timeout = TimeSpan.FromMinutes(5);
    DateTime start_time = DateTime.Now;

    while(DateTime.Now - start_time < timeout)
    {
        this.Do_Proces();
    }
}
于 2013-01-02T01:02:28.573 回答