首页 > 解决方案 > 使用高分辨率计时器在 WPF 中工作时出现异常

问题描述

我正在尝试让一个高分辨率计时器与我在 WPF 中的刻度一起工作。我的应用程序基于传感器数据实时执行一些计算,并且我正在使用 StreamWriter 将数据(5 Hz - 每 200 毫秒)记录到 CSV 文件中。

我目前正在尝试System.Timers.Timer以查看它是否有效,但出现此异常:“调用线程无法访问此对象,因为不同的线程拥有它”

我之前也尝试过System.Windows.Threading.DispatcherTimer但意识到它不适合,因为调用滴答时的漂移变化太大并且我得到不一致的条目。

我一直在寻找解决方案,并看到了一些关于使用 Dispatcher.BeginInvoke 的信息,但这对我来说有点困惑,因为我是 C# 新手。

现在我的实现如下:

初始化定时器:

    void TimerInit()
    {
        //recFreq = 5 Hz - Interval = 200 ms
        timer.Interval = ((1 / recFreq) * 1000); 
        timer.Elapsed += new ElapsedEventHandler(Timer_Tick);
        timer.AutoReset = true;
        timer.Enabled = false;
    }

释放定时器:

    void TimerInit()
    {
        timer.Dispose();
    }

开始记录按钮:

    void OnClickStart(object sender, RoutedEventArgs e)
    {
        TimerInit();
        timer.Enabled = true;
        while (button_Stop.IsEnabled != true)
        {
            calculate();
        }
    }

打钩:

    void Timer_Tick(object sender, ElapsedEventArgs e) 
    {
        try
        {
            StreamWriter sw = new StreamWriter(*path*, true);
            //Write Data
            sw.Close();
        }
        catch (Exception ex)
        {
            //Print Error
            TimerRelease();
        }
    }

关于如何让它工作或以更好的方式实施它的任何想法?

非常感谢您,感谢您的任何意见!

标签: c#wpftimer

解决方案


推荐阅读