C#后台工作者和定时器循环

时间:2010-04-05 18:19:00

标签: c#

这是我第一次尝试使用计时器,如果有人可以帮我解决我出错的地方,那就太棒了。

我正在尝试使用while循环,如果计时器达到30秒,则尝试再次循环。

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        System.Windows.Forms.Timer my_timer = new System.Windows.Forms.Timer();
        my_timer = null;
        //int restartticker = 30000;
        while (true)
        {
            my_timer.Start();
            if (my_timer.Equals(30000))
            {
                watcherprocess1();
            }
            my_timer = null;
        }
    }

对象引用未设置为对象的实例。 my_timer.Start();

5 个答案:

答案 0 :(得分:4)

您的错误是由将Timer设置为null引起的,要解决这个问题只需删除my_timer = null;(2x)。

但是Timer不适合'暂停'一个线程(BGW)。一个简单的解决方案如下:

    while (true)
    {
         Thread.Sleep(30000);
         watcherprocess1();
    }

编辑:

我发现了你的previous question。共识(但不是接受的答案)是使用Timer 而不是的背景工作者的建议,而不是背景工作者中。

答案 1 :(得分:2)

这些是这些行(你应该删除它们):

my_timer = null;

如果没有代码评论,我不能给你一个不错的选择(即,我不知道你为什么要这样做)。

答案 2 :(得分:1)

为什么要创建Timer对象,然后立即将其设置为null

您应该订阅Tick事件,并将代码放在那里。如果设置其间隔,它应该每30秒自动循环一次。

答案 3 :(得分:1)

这是使用Timer类的完全错误的尝试。 my_timer.Equals(30000)永远不会评估为true,因为Timer不会覆盖Object.Equals()

如果您想在计时器达到30秒时执行某些操作,则必须将my_timer.Interval设置为30000,然后订阅my_timer.Tick事件。

您可能希望查看Timer类的documentation

正如其他人所说,不要做my_timer = null

答案 4 :(得分:0)

初始化计时器,然后将其设置为null:

my_timer = null;

这意味着当您致电my_timer.Start()时,my_timer没有任何值...因此异常。

不幸的是,如果没有更好的理解你想要完成的任务,我们将无法帮助你提供更好的代码来完成工作。