c# - 为什么 DispatcherTimer 在某个随机时间后停止触发?

标签 c# wpf parallel.foreach dispatchertimer

我已经正确设置 DispatchTimer 每秒触发一次-

OneSecondChecker = new DispatcherTimer();
OneSecondChecker.Tick += new EventHandler(OneSecondChecker_Tick);
OneSecondChecker.Interval = new TimeSpan(0, 0, 1);                 
OneSecondChecker.Start();

问题:它会在一段时间内正确触发,然后就停止触发。

附加信息: 现在你可能会问它有什么作用?如果方法 OneSecondChecker_Tick() 正在运行,则有一个类级(静态) bool 变量设置为 true,如果未运行则设置为 false,这样我们就不会同时运行此方法的两个实例即使它被设置为每秒触发一次。应用程序要求确保 OneSecondChecker_Tick() 运行时没有任何延迟。我也不想在无限循环中运行。在 OneSecondChecker_Tick() 运行之前进行第二次检查以查看表值是否已更新。正是该表值“某种程度上”通知 OneSecondChecker_Tick() 运行。该表值由另一个应用程序更新。

在方法本身中,我确实调用了使用 TPL 并行运行线程的方法。不知道有没有关系。

编辑 我仍然无法弄清楚这一点。可能是应用程序被卡住了。任务管理器并没有这么说。是否可以判断应用程序是否未从任务管理器以外的其他地方响应?

最佳答案

问题不在于 DispatchTimer。它甚至不是 TPL。问题在于代码在无限循环中运行并导致堆栈溢出 - 之后它停止触发。

关于c# - 为什么 DispatcherTimer 在某个随机时间后停止触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13702943/

相关文章:

c# - 如何提高 FlowDocumentScrollViewer 的性能?

c# - 如何使用Parallel.ForEach显示IDictionary的值?

c# - 一个由不同线程分别创建的对象仍然是共享的

c# - 通过在主 GUI 之后创建隐藏的 GUI 元素来更快地启动 Winforms,而不牺牲 GUI 设计器

c# - Blazor WebAssembly 更新页面标题

c# - 试图让 View 记住 ClientID

wpf - 如何在资源字典的datatemplate中添加事件处理程序来控制

wpf - 按名称查找控制的父级

c# - 在 linq 中连接字符串时获取 null

c# - 如何防止 Parallel.ForEach 循环在运行时更改任务数?