DispatcherTimer Tick事件疑问:MyCode会先于Timer.Stop()执行完成吗?
DispatcherTimer执行顺序问题解答
问题
当调用以下DispatcherTimer事件代码时,MyCode方法会在Timer.Stop()执行前完成线程内的运行吗?
DispatcherTimer Timer = new DispatcherTimer(); Timer.Tick += (s, e) => { MyCode(); Timer.Stop(); }; Timer.Start(); Timer.Interval = TimeSpan.FromSeconds(10); private static void MyCode() { /* EXAMPLE MY CODE RUN */ }
回答
会的,MyCode方法会在Timer.Stop()执行前完整运行完毕。
原因很直接:DispatcherTimer的Tick事件回调是在Dispatcher线程上同步执行的,事件处理程序里的代码严格按照从上到下的顺序依次执行。只要MyCode是同步方法(就像示例里的实现),只有当MyCode的所有代码执行完成后,才会走到Timer.Stop()这一行。
如果MyCode内部包含异步操作(比如带有await的调用),情况会不一样——此时MyCode会在异步操作开始后先返回,Timer.Stop()会在异步操作完成前执行。但你的示例里MyCode是同步方法,所以完全不用担心执行顺序问题。
内容的提问来源于stack exchange,提问作者Sói9x
相关产品推荐
相关产品推荐

