c# - 使用高分辨率计时器在 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();
}
}
关于如何让它工作或以更好的方式实施它的任何想法?
非常感谢您,感谢您的任何意见!
解决方案
推荐阅读
- php - 获取 HTML 滑块的 post 值并基于整数分配文本值
- ios - ios-charts:轴和网格线间歇性缺失
- c++ - 执行相同功能的不同结果[C++]
- javascript - 我可以用 Jasmine 测试 setInterval 吗?
- java - sbt 0.13.17 “编译 sbt 组件‘编译器接口’时出错”
- c# - AWS lambda 不在 CloudWatch 中写入日志
- javascript - 使用 Javascript 制作画布全屏
- mysql - go-xorm 是否可以检测 DATETIME(3) 类型?
- python - Python 缓冲区,它们是如何工作的?
- python - ImportError:没有名为“numpy”的模块,但它就在那里!蟒蛇3.5