gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:51 25 4
gpt4 key购买 nike

我的部分程序通过网络连接接收输入,并发回消息。我想限制某个输入可以触发消息的次数,所以程序不能过载。

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

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

它会像它应该的那样写入控制台,但只是等待计时器不起作用。它会发送一次响应,然后不会再次发送,因为计时器永远不会停止。

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

我错过了什么?

最佳答案

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

This timer is optimized for use in Windows Forms applications and must be used in a window.

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

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

关于C# System.Windows.Forms.Timer EventHandler 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com