检查线程中是否已经过了计时器

时间:2013-01-02 00:57:13

标签: c# .net events timer

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

问题是因为我在另一个线程(backgroundworker)工作,我的计时器必须在同一个线程中实例化。所以我不能设置任何私有布尔timer_Elapsed。我是否知道如何引用boolean 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。然后检查用户是否希望进程停止,如果没有,我希望它再次运行..我使用计时器,因为线程必须重新启动很多,这将对主线程产生影响,影响用户经历不好。

1 个答案:

答案 0 :(得分: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();
    }
}