• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

С# автоматическое переподключение к COM порту

~localhost

Green Team
30.10.2017
230
49
BIT
20
Привет, начал изучать C#, пишу не большую программку, которое будет показывать открыта дверь в комнату или нет, данные о состояние беру с контроллера atmega через USB -> TTL адаптер.
Проблема заключается в том, что если разорвать соединения ( выдернуть из USB) а потом его восстановить то работа не возобновляется. Подскажите как это можно решить, пока туго доходить после python как тут все работает.
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace check_my_door
{
    public partial class Form1 : Form
    {

        public Form1()
        {
          
            InitializeComponent();
            System.IO.Ports.SerialPort Serial;
            Serial = new SerialPort("COM3", 9600, System.IO.Ports.Parity.None, 8, StopBits.One);
            Serial.DataReceived += Port_DataReceived;
            try
            {
                Serial.Open();
            }
            catch
            {
                Serial.Close();
                label1.Text = "Error";
            }
        }

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
          
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        
        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F1 && e.Alt)
            {
                notifyIcon1.Icon = new Icon("F:/C#/check_my_door/ico/door_icon_126434.ico");
            }
        }
        private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;

            try
            {
                if (sp.ReadTo("\r\n") == "1")
                {
                    //label1.Text = "One";
                    notifyIcon1.Icon = new Icon("F:/C#/check_my_door/ico/door_icon_126434.ico");
                }
                if (sp.ReadTo("\r\n") == "0")
                {
                    //label1.Text = "zero";
                    notifyIcon1.Icon = new Icon("F:/C#/check_my_door/ico/star52_41769.ico");
                }
            }
            catch (System.IO.IOException) {
                sp.Close();
            }
        }
    }
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!