System.Windows.Forms.Timer是否在与UI不同的线程上运行?

| 我有一个主线程,它创建一个表单对象,该对象创建并设置一个计时器,以便每分钟运行一个名为updateStatus()的函数。但是updateStatus()也被主线程在多个位置调用。 但是,我不清楚它是否会引起任何同步问题。 C#中的System.Windows.Forms.Timer是否在除主线程之外的其他线程上运行?     
已邀请:
不,计时器事件在UI线程上引发。 您不会出现任何同步问题。这是在WinForms应用程序中使用的计时器控件的正确版本。它是专门为满足您的要求而设计的。它是使用标准Windows计时器在后台实现的。 文档在“备注”部分中对此进行了确认:   计时器用于按用户定义的时间间隔引发事件。该Windows计时器是为使用UI线程执行处理的单线程环境而设计的。它要求用户代码具有可用的UI消息泵,并且始终在同一线程上运行,或者将调用编组到另一个线程上。      使用此计时器时,请使用Tick事件执行轮询操作或在指定的时间段内显示启动屏幕。每当Enabled属性设置为true且Interval属性大于零时,都会基于Interval属性设置以一定的间隔引发Tick事件。     
不,当计时器的Tick事件接收到WM_TIMER消息时,将通过消息循环从UI线程引发该事件。您总是很满意,它只能在您的UI线程空闲时运行。     
没有。 Windows.Forms Timer的全部要点是它在GUI线程上运行。 Windows(WinForms)运行称为MessagePump的程序(请参见
Application.Run()
),这使Timer成为可能。 您的所有代码都以某种方式作为Eventhandler的一部分运行,并且Timer刻度永远不会“中断”任何其他事件处理程序。     
Windows.Forms计时器大概通过同步上下文将事件引发回UI线程。 如果要使用非UI线程,则还有其他计时器-例如System.Timers.Timer或System.Threading.Timer     
根据文档,它在主UI线程上运行:   计时器用于引发以下事件   用户定义的时间间隔。这个视窗   计时器专为   UI所在的单线程环境   线程用于执行   处理。它要求用户   代码具有可用的UI消息泵   并始终以相同的方式运行   线程,或将呼叫编组到   另一个线程。     

要回复问题请先登录注册