这是我第一次尝试使用计时器,如果有人可以帮我解决我出错的地方,那就太棒了。
我正在尝试使用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();
答案 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没有任何值...因此异常。
不幸的是,如果没有更好的理解你想要完成的任务,我们将无法帮助你提供更好的代码来完成工作。