如何在BackgroundWorker中等待SerialPort DataReceived事件处理程序

时间:2013-06-18 18:43:28

标签: c# multithreading serial-port backgroundworker

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

1 个答案:

答案 0 :(得分:0)

你根本不应该使用后台工作者,因为你有异步而不是同步工作。相反,只需发送请求并完成在事件处理程序中完成响应所需的任何操作。