【发布时间】:2015-06-07 04:22:40
【问题描述】:
所以我有一个计时器,它每秒运行一次。通常只需要几毫秒即可运行,但有时一个计时器运行的执行时间会超过 1 秒。 这本身不是问题,因为 c# 会处理将不同的运行放入不同(或相同)线程等。
但是,如果我想在同时执行 2 次运行时识别调用了某个方法的运行怎么办? 我想在我的控制台中有一个输出,例如:
Run 1: Method "GetThisStuff" called
Run 1: Method "GetOtherStuff" called
Run 2: Method "GetThisStuff" called
Run 1: Method "GetFinalStuff" called
Run 2: Method "GetOtherStuff" called
Run 2: Method "GetFinalStuff" called
如果我有计时器方法
public static void timer_Elapsed(object sender, ElapsedEventArgs e) {
GetMainStuff();
GetMoreMainStuff();
}
还有一些虚拟方法:
public void GetMainStuff()
{
GetThisStuff();
GetOtherStuff();
}
public void GetMoreMainStuff()
{
GetFinalStuff();
}
我知道有
ElapsedEventArgs.SignalTime
但我不想通过我的应用程序的每个方法(向下几个“级别”)将此作为参数。
我也知道,并非每次新运行都会有一个新线程。
如果我有一个静态记住的 SignalTime,它会在每次运行时被覆盖。
有什么想法吗?
【问题讨论】:
-
你的断言是错误的,它总是是个问题。只需将 AutoReset 属性设置为 false 并在事件处理程序结束时调用 Start()。
-
好吧,我知道多线程通常存在(很多)问题,但这目前并没有给我带来任何问题,这可能就是我的意思。;)但我的问题仍然是如何识别不同的run及时重叠,不要让run一个接一个地跑。