You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:32:06