我正在开发一个C#Windows Forms应用程序,它通过串行端口与数字万用表连接。在我的BackgroundWorker的DoWork
事件处理程序中,我向万用表发送了几个命令,例如进行电压/电阻测量,然后请求数据。然后引发串口的DataReceived
事件,并在该方法中做一些简短的处理;我使用ReadLine()
并将数据存储在字符串中。但我认为因为DoWork
和DataReceived
是异步的,如果我在请求数据的语句之后立即尝试在DoWork
中使用该字符串,我将无法获得正确的值;我必须等待DataReceived
完成。目前我在每个这样的陈述之后只有一个Thread.Sleep(100)
。我确定这不是最好的解决方案,是否有更有效的方式等待DataReceived
完成或处理此线程问题?
答案 0 :(得分:0)
你根本不应该使用后台工作者,因为你有异步而不是同步工作。相反,只需发送请求并完成在事件处理程序中完成响应所需的任何操作。