我想构建一个 Windows 服务,它应该在不同的时间执行不同的方法。它根本与准确性无关。我使用 system.timers.timer,并使用计数器调节要在 Eventhandler 方法中执行的不同方法。到目前为止一切正常。
所有方法都在访问 COM 端口,因此必须一次仅授予一种方法的访问权限。但是由于这些方法可能需要一些时间才能完成,因此计时器可能会再次计时并希望在 COM 端口仍被占用时执行另一个方法。在这种情况下,事件可以而且应该被解雇。
简化为一种方法,我的 elapsedEventHandler 方法如下所示(try-catch 和此处排除的不同方法)
注意:虽然这在我的 Win7 x64 上运行良好,但在安装了几乎完全相同的软件的 Win7 x86 机器上,每当要执行的方法需要很长时间时,它都会遇到困难。计时器不会再滴答作响,不会抛出异常。没有什么!我现在的问题是:我是否在做访问控制和计时器的部分,以便我可以专注于其他事情?我只是不太熟悉计时器,尤其是线程
private static int m_synchPoint=0;
private System.Timers.Timer timerForData = null;
public MyNewService()
{
timerForData = new System.Timers.Timer();
timerForData.Interval = 3000;
timerForData.Elapsed += new ElapsedEventHandler(Timer_tick);
}
//Initialize all the timers, and start them
protected override void OnStart(string[] args)
{
timerForData.AutoReset = true;
timerForData.Enabled = true;
timerForData.Start();
}
//Event-handled method
private void Timer_tick(object sender, System.Timers.ElapsedEventArgs e)
{
////safe to perform event - no other thread is running the event?
if (System.Threading.Interlocked.CompareExchange(ref m_synchPoint, 1, 0) == 0)
{
//via different else-ifs basically always this is happening here, except switching aMethod,bMethod...
processedevent++;
Thread workerThread = new Thread(aMethod);
workerThread.Start();
workerThread.Join();
m_synchPoint=0;
}
else
{
//Just dismiss the event
skippedevent++;
}
}
非常感谢您!
任何帮助是极大的赞赏!