gpt4 book ai didi

c# - DispatcherTimer.Start() 在后台线程中启动 Tick?

转载 作者:行者123 更新时间:2023-11-30 20:41:44 25 4
gpt4 key购买 nike

是否DispatcherTimer开始一个新线程?

我注意到下面的代码示例是非阻塞的:

//  DispatcherTimer setup
dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,1);
dispatcherTimer.Start();

所以在这个代码示例中,Tick(即 EventHandler)是在不同的线程上执行还是在设置 dispatcherTimer?

最佳答案

Tick 事件处理程序始终在拥有 DispatcherTimer 对象的线程中引发。使用该计时器类的正常方法是在 UI 线程中创建对象,然后在 UI 线程中引发事件处理程序。

但就您关于这种情况如何发生以及 DispatcherTimer 是否启动新线程的问题而言……

计时器的确切实现只是:一个实现细节。该框架可以使用后台线程进行计时,也可以使用其他机制。

碰巧,DispatcherTimer 的当前实现使用 native WM_TIMER 机制(即不,它不会启动新线程)。这是有道理的,因为 DispatcherTimer 的一个特性是在调度程序线程上引发计时器事件,而一种方便的方法是让计时器通知来自同一线程中的 Windows,WM_TIMER 可以。

但是您不能也不应该假设这一点。您真正知道的是 DispatcherTimer promise 在调度程序线程中引发计时器事件。

请注意,无论如何,Start() 方法必然是非阻塞的。如果该方法调用被阻塞,它将首先抵消使用计时器的所有好处。 :)

关于c# - DispatcherTimer.Start() 在后台线程中启动 Tick?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32108682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com