【问题标题】:Windows.Forms.Timer instance and UI threadsWindows.Forms.Timer 实例和 UI 线程
【发布时间】:2010-04-18 18:56:27
【问题描述】:

我有一个自定义控件,其主要目的是绘制数据。我想向控件添加一个 ScheduleUpdate(int milliSeconds) 方法,该方法将在 X 毫秒后强制更新。

既然这都是 GUI 领域,我应该使用 Windows.Forms.Timer,但是这个计时器实例如何知道它属于哪个线程?如果从非 UI 线程调用 ScheduleUpdate() 会怎样?

我应该在 Control 构造函数中构造计时器吗?或者也许是 Load 事件?或者在我进入 ScheduleUpdate() 之前推迟施工是否安全?

我知道已经有一些非常相似的问题,但我没有在我的控件上有一个 Timer 组件,我是在需要时构建它。

【问题讨论】:

    标签: winforms multithreading timer


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多