c# - 系统线程定时器

标签 c# wpf timer

我在将 DispatcherTimer 语法转换为 Thread Timer 时遇到问题。当我运行我的应用程序时,它突然关闭,没有任何错误。

基本上我希望计时器每 5 秒执行 2 个方法。

编辑:这两种方法正在更新 UI。 我试图摆脱 DispatcherTimer,因为我在 UI 显示中有很多卡住和延迟。

调度程序计时器代码:

timerW = new DispatcherTimer();
    timerW.Tick += new EventHandler(timerW_Tick);
    timerW.Interval = new TimeSpan(0, 0, 5000);
    timerW.Start();



 private void timerW_Tick(object sender, EventArgs e)
        {
            DisplayWegingInfo();
            CaculateTimen();
        }

System.Threading 定时器的代码:

public void InitializeDispatcherTimerW()
    {
        TimerCallback callback = MyTimerCallBack;
        timerW = new Timer(callback);

        timerW.Change(0, 5000);
    }

    private void MyTimerCallBack(object state)
    {
        DisplayWegingInfo();
        CaculateTime();
    }

谢谢。

最佳答案

问题很可能是您在定时器回调的方法中更新了您的用户界面。这只能在 UI 线程中实现,并且计时器在后台线程中运行。

我建议您坚持使用 DispatcherTimer

另一种解决方案是将代码拆分一些:将工作密集型代码提取到其他方法中并在后台线程中运行它们,然后从 UI 线程更新 UI。

像这样:

private void MyTimerCallBack(object state)
{
    LongCalculationsThatDontNeedTheUI();
    _dispatcherUIThread.Invoke(new Action(UpdateUI));
}

关于c# - 系统线程定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176680/

相关文章:

c# - 从 html 字符串匹配电子邮件正则表达式

c# - 在窗口出现之前拦截并隐藏它

.net - 如何在wpf文本框中自动化数字格式

android - 重新安排。取消后的计时器给出 "java.lang.IllegalStateException: Timer cancelled."

c# - 应用程序验证许可证执行情况?

c# - ModelState 在表单提交时无效 - 需要 IEnumerable<SelectListItem>

wpf - 显示添加到 ItemsControl 的最新项目

wpf - 简单的 WPF 编程错误会引发蓝屏吗?

python: 慢 timeit() 函数

c# - C# 中的单调 WaitableTimer