长话短说,我需要在 .Net 中使用一个精确的计时器 - 毫秒级别的精度 - 这意味着,如果我让它在10毫秒后触发一个事件,它必须按照+-1毫秒的精度执行。内置的 .Net 计时器类似乎只有+-16毫秒的精度,这对我的应用程序是无法接受的。
我找到了这篇文章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计时器没有这样的问题 - 在.Net计时器的OnTimer中,我可以自由修改控件的成员。
问题:我应该改变什么,使得我的计时器在主线程运行它的OnTimer事件?添加“Invoke”是唯一的选择吗?