蓝牙设备断开连接并且子进程关联结束时如何正确检测?

时间:2019-04-08 04:07:33

标签: c# bluetooth arduino serial-port backgroundworker

我正在使用arduino和蓝牙模块构建项目,该设备发送串行端口数据,并且在c#中构建的软件正确接收了数据,我需要检测设备何时断开连接并向用户显示一条消息,但是当我断开设备的连接时,该应用程序不会启动任何异常,并且不会显示任何错误消息。

我正在使用后台工作程序,我试图检测设备是否在无限循环中断开连接,因为我需要不断显示数据并将其保存在确定的时间内。我也使用了异步方法,但是结果是一样的。

getDataNow=true;
var worktest = new BackgroundWorker()
    {
      WorkerReportsProgress = true,
      WorkerSupportsCancellation = true
    };

worktest.DoWork += UpdateData;
worktest.RunWorkerAsync();

private void UpdateData(object sender, DoWorkEventArgs e)
{
    while (getDataNow)
    {
        try
        {
            string serialData = "";
            Console.WriteLine("status " + serialPort.IsOpen);
            if (serialPort.IsOpen == true)
            {
                serialData = serialPort.ReadLine();

            }
            else
            {
                BtnDetectStyle("detect");
                MessageBox.Show("El dispositivo ha sido desconectado", device,
                MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                getDataNow = false;
            }

            Console.WriteLine("serial port data " + serialData);

            if (serialData.Length > 0)
            {
                GetDataSensor(serialData, out string temperature, out string humidity);
                this.Invoke((MethodInvoker)delegate ()
                {
                    this.lblHum.Text = humidity;
                    this.lblTemp.Text = temperature; 
                });

                Console.Write("7");

                if (DateTime.Now.ToString("h:mm tt") == conf.GetDateMorning)
                {
                    Thread.Sleep(60000);
                }

                if (DateTime.Now.ToString("h:mm tt") == conf.GetDateAfternoon)
                {
                    Thread.Sleep(60000);
                }
            }
        }
        catch (TimeoutException te)
        {
            Console.WriteLine(te);
        }
    }
}

我期望出现异常或“设备已断开连接”消息,但是我得到了 “线程xx以代码0结尾”

outpt

感谢您的帮助。

0 个答案:

没有答案