我的程序的一部分通过网络连接接收输入,然后发回一条消息。我想限制某个输入触发消息的次数,这样程序就不会过载。
我有一个后台工作程序等待输入,然后当它收到特定的输入时,它调用一个静态类,该类将确定自上次输入以来是否有足够的时间。我用的是一个
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
它会像应该的那样写入控制台,但只是等待计时器不起作用。它将发送一次响应,然后不再发送,因为计时器从未停止。
可笑的是,我让它在另一个班上几乎完全一样。唯一的区别是计时器在不断运行。
我错过了什么?
代码的一个问题是它使用的是系统。窗户。形式。计时器
从后台线程初始化,并且与窗口不关联。这违反了文档中给出的说明:
此计时器针对Windows窗体应用程序进行了优化,必须在窗口中使用。
对于与GUI对象无关的定时器,使用System.定时器。定时器
。
这可能是问题的原因,也可能不是问题的原因,但这是代码正常工作需要解决的一个问题。
窗口正在进行无限循环或其他操作,我正在处理后打印数据流,但看起来根本没有达到那个点。 下面是我的伪代码。 我在reduce函数中添加了要打印的日志。正在从reduce函数打印日志。但是这条流没有被打印出来。 并且流源数据是历史数据,即。。超过2个月的旧数据。如果是历史数据流,还需要专门设置其他内容吗? 任何输入都会大有裨益。。
问题内容: 我需要在C / C ++ linux中每’n’毫秒激活一次的函数(例如,信号处理程序)。如何设置信号等,以便以毫秒分辨率注册计时器事件。 精度并非至关重要,但需要在数百毫秒左右的时间内。 我是Linux新手,我真的不知道从哪里开始。 问题答案: 是一个好的开始,但是您真的要与信号异步吗?否则,您可能会有一个带有或以及适当超时的主循环。
假设我有这样的东西: 它与以下内容有多大不同: 我是说什么时候我应该用第一个,什么时候用第二个?利与弊是什么?
本文向大家介绍C#Lambda表达式作为事件处理程序,包括了C#Lambda表达式作为事件处理程序的使用技巧和注意事项,需要的朋友参考一下 示例 Lambda表达式可用于处理事件,在以下情况下非常有用: 处理程序很短。 处理程序永远不需要取消订阅。 下面给出了一个可能使用lambda事件处理程序的良好情况: 如果有必要在代码的某个将来点取消订阅已注册的事件处理程序,则应将事件处理程序表达式保存到一
我有一个类,其中一个方法运行了X分钟,另一个方法调用了一个事件处理程序。这两个都会修改静态列表的状态。 下面是代码 事件处理器方法将检查进程,如果进程存在,它将执行一些逻辑,如果进程不存在,它将使用新的逻辑更新相同的进程。 计时器将每隔X间隔运行一次,并将每个进程的当前状态发送到外部系统,并将从中删除该进程。 在这里,我需要确保中的检查代码与 中的删除代码 不冲突 根据我的理解,添加一个锁会阻止使
我们有一个使用Disruptor框架的系统,它有五个注册阶段来实现EvenetHandler。 阶段按顺序工作,因此请求只能在第一阶段完成时移动到第二阶段,该移动由Disruptor内部维护。 我们对第三阶段有问题,这是瓶颈,需要大量时间,因为它进行不同的HTTP调用并将响应存储在请求对象中。 因此,我们希望在第三阶段花了一段时间之后,将请求(无论有什么响应)提前到第四和第五阶段。 如何超时任何特