2010-04-18 58 views
0

我有一个自定义控件,其主要用途是绘制数据。我想为控件添加一个ScheduleUpdate(int milliSeconds)方法,该方法将从现在开始强制更新X毫秒。Windows.Forms.Timer实例和UI线程

因为这是所有的GUI土地,我应该使用Windows.Forms.Timer,但是这个计时器实例如何知道它属于哪个线程?如果从非UI线程调用ScheduleUpdate()会怎么样?

我应该在Control构造函数中构造计时器吗?或者可能是Load事件?或者是否可以安全地推迟构建,直到我进入ScheduleUpdate()?

我知道这里面有一些非常类似的问题,但我的不是在我的控制器上有一个Timer组件,我在它需要的基础上构建它。

回答

1

它知道,因为它知道它创建在哪个线程上。有一个不可见的帮助窗口接收WM_TIMER消息,该消息又触发Tick事件。该窗口具有线程相关性,线程上的消息循环将分派消息。这应该是你的应用的UI线程。

请确保您在与窗体及其控件相同的线程上创建此计时器。只需将它放在窗体上或者在窗体或控件构造器中创建它。然后您只需要将计时器的启用属性设置为true即可。这是线程安全的,您可以在调度程序线程上执行此操作。