长话短说,我需要.Net 中的精确计时器 - 精度以毫秒为单位 - 意思是,如果我告诉它在 10 毫秒过去后触发事件,它必须这样做,+-1 毫秒。内置的 .Net Timer 类的精度似乎为 +-16ms,这对我的应用程序来说是不可接受的。
我发现这篇文章http://www.codeproject.com/Articles/98346/Microsecond-and-Millisecond-NET-Timer为我需要的计时器提供了一个代码(甚至更多 - 以微秒为单位) .
但是,问题是,等效的 OnTimer 似乎在另一个线程中执行。所以,如果我添加一些代码,说:
label1.Text = "Hello World";
我会得到一个例外,因此我将不得不像这样实际编写它:
Invoke( new MethodInvoker(() =>{label1.Text = "Hello World";}));
据我了解,这是因为 OnTimer 事件是从计时器的线程中触发的——在该线程中,时间已经过去了,直到足够的时间超过了 Interval,然后下一个 OnTimer 事件被触发。.Net Timer没有这样的问题——在.Net Timer的OnTimer中,我可以自由修改控件的成员。
问题:我应该更改什么以便我的计时器在主线程中运行它的 OnTimer 事件?添加“调用”是唯一的选择吗?