gpt4 book ai didi

c# - 用于串口数据处理的线程抛出 "This BackgroundWorker is currently busy and cannot run multiple tasks concurrently"

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:08 24 4
gpt4 key购买 nike

我正在用 C# 开发一个应用程序,该应用程序从串行端口获取数据,对其进行处理并将其显示给 UI。数据以 5-50 毫秒的速度非常快地到来。在我没有使用任何线程之前。因此应用程序依赖于单个应用程序线程,该线程从串行端口获取数据、处理数据并将其显示给用户界面。它丢失了一些数据。然后我开始实现 BackgroundWorker 线程以消除单线程上的一些开销并考虑良好的性能。现在我收到“此 BackgroundWorker 当前正忙,无法同时运行多个任务”错误。我认为 Thread 无法应对来自串行端口的数据的速度。因此在执行“backgroundWorker1.RunWorkerAsync(data);”时抛出错误。我需要一些建议来实现这种场景的更好方法是什么?

最佳答案

geofftnz 是正确的,我会为您扩展一下。您应该只启动一次后台工作程序,并让它使用 ReportProgress 将数据反馈给 GUI 线程。工作线程看起来像这样。

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackGroundWorker;
while(!e.CancellationPending)
{
ResultObject ro = new ResultObject(); // your own type here, obviously
//Process and store some data in ro;
worker.ReportProgress(0, ro);
//Do not modify ro after reporting progress to avoid threading issues
}
}

从 GUI 中,注册到 ProgressChanged 事件,并且只启动工作程序一次。

关于c# - 用于串口数据处理的线程抛出 "This BackgroundWorker is currently busy and cannot run multiple tasks concurrently",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com