未调用C#System.Windows.Forms.Timer EventHandler

未调用C#System.Windows.Forms.Timer EventHandler,c#,timer,eventhandler,C#,Timer,Eventhandler,我的程序的一部分通过网络连接接收输入,然后发回一条消息。我想限制某个输入触发消息的次数,这样程序就不会过载 我有一个后台工作程序等待输入,然后当它收到特定的输入时,它调用一个静态类,该类将确定自上次输入以来是否有足够的时间。我用的是一个 System.Windows.Forms.Timer 这样做。看起来是这样的(所有内容都是公共的,所以我可以调试): 问题是,Time_Tick方法从未从计时器调用。我可以使用Invoke()来触发这样的方法 EventHandler testHand

我的程序的一部分通过网络连接接收输入,然后发回一条消息。我想限制某个输入触发消息的次数,这样程序就不会过载

我有一个后台工作程序等待输入,然后当它收到特定的输入时,它调用一个静态类,该类将确定自上次输入以来是否有足够的时间。我用的是一个

System.Windows.Forms.Timer
这样做。看起来是这样的(所有内容都是公共的,所以我可以调试):

问题是,Time_Tick方法从未从计时器调用。我可以使用Invoke()来触发这样的方法

    EventHandler testHandler = new EventHandler(InputResponse.Time_Tick);
    testHandler.Invoke(sender, e);//triggered by a button
它会像应该的那样写入控制台,但只是等待计时器不起作用。它将发送一次响应,然后不再发送,因为计时器从未停止

可笑的是,我让它在另一个班上几乎完全一样。唯一的区别是计时器一直在运行


我缺少什么?

您的代码的一个问题是,它正在后台线程中使用
System.Windows.Forms.Timer
类,并且与窗口没有关联。这违反了以下文件中给出的说明:

此计时器针对Windows窗体应用程序进行了优化,必须在窗口中使用

对于与GUI对象无关的计时器,请使用
System.timers.Timer


这可能是问题的原因,也可能不是问题的原因,但要使代码正常工作,您需要解决这一问题。

代码的一个问题是,它使用的是后台线程中的
System.Windows.Forms.Timer
类,而不是与窗口关联的类。这违反了以下文件中给出的说明:

此计时器针对Windows窗体应用程序进行了优化,必须在窗口中使用

对于与GUI对象无关的计时器,请使用
System.timers.Timer


这可能是问题的原因,也可能不是问题的原因,但要使代码正常工作,您需要解决这一问题。

您从未启动/启用计时器。Do
Time.Start()
Oops我确实启动了它,只是没有把它放在问题中你确定你在某处调用
InputReceived
吗?@roryap是的,因为它第一次被调用时会发送消息,但是在那之后,它不会发送,因为计时器还在运行。“发送消息”——你是说
Console.WriteLine(“time_Tick”)?“但在那之后,就不会了,因为计时器还在运行。”--这是什么意思?你从来没有启动/启用过计时器。Do
Time.Start()
Oops我确实启动了它,只是没有把它放在问题中你确定你在某处调用
InputReceived
吗?@roryap是的,因为它第一次被调用时会发送消息,但是在那之后,它不会发送,因为计时器还在运行。“发送消息”——你是说
Console.WriteLine(“time_Tick”)?“但在那之后,不会了,因为计时器还在运行。”--这是什么意思?哇,这确实解决了它,嗯。我想我应该开始用这些东西做它们的用途:P非常感谢。哇,这真的解决了它,嗯。我想我应该开始用这些东西做它们的用途了:P非常感谢。
    EventHandler testHandler = new EventHandler(InputResponse.Time_Tick);
    testHandler.Invoke(sender, e);//triggered by a button