Как правильно определить, когда устройство Bluetooth отключено, а подпроцесс ассоциирован? - PullRequest
0 голосов
/ 08 апреля 2019

Я строю проект с модулем arduino и bluetooth, устройство отправляет данные для последовательного порта, а сборка программного обеспечения в 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

Спасибо за вашу помощь.

...