【发布时间】:2015-02-11 19:50:12
【问题描述】:
我的程序的一部分通过网络连接接收输入,然后发回一条消息。我想限制某个输入可以触发消息的次数,这样程序就不能超载了。
我有一个等待输入的后台工作人员,然后当它接收到某个输入时,它会调用一个静态类,该类将确定自上次输入以来是否有足够的时间。我正在使用一个
System.Windows.Forms.Timer
为此。它看起来像这样(一切都是公开的,所以我可以调试):
public static class InputResponse
{
public static System.Windows.Forms.Timer Time = new System.Windows.Forms.Timer();
public static void CreateTimer()//set all the properties of the timer
{
Time.Interval = 3000;
Time.Tick += new EventHandler(Time_Tick);
}
public static void InputAReceived()
{
if (Time.Enabled) //if the timer is running, do nothing
return;
else
{
//send response here
Time.Start();
}
}
public static void Time_Tick(object sender, EventArgs e)
{
Console.WriteLine("Time_Tick");
Time.Stop();
}
}
问题是,Time_Tick 方法永远不会被计时器调用。我可以使用 Invoke() 来触发这样的方法,
EventHandler testHandler = new EventHandler(InputResponse.Time_Tick);
testHandler.Invoke(sender, e);//triggered by a button
它像它应该的那样写入控制台,但只是等待计时器不起作用。它会发送一次响应,然后不会再发送一次,因为计时器永远不会停止。
可笑的是,我在另一个班级里的工作方式几乎完全相同。唯一的区别是计时器一直在运行。
我错过了什么?
【问题讨论】:
-
您从未启动/启用您的计时器。做
Time.Start(); -
糟糕,我确实已经开始了,只是没有把它放在问题中
-
你确定你在某个地方打电话给
InputAReceived吗? -
@roryap 是的,因为第一次被调用时,它会发送消息,但之后就不会了,因为计时器仍在运行。
-
“发送消息”——你的意思是
Console.WriteLine("Time_Tick");? “但在那之后,它就不会了,因为计时器还在。” ——这是什么意思?
标签: c# timer eventhandler