• Твой профиль заполнен на 0%. Заполни за 1 минуту, чтобы тебя нашли единомышленники и работодатели. Заполнить →

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

~localhost

Green Team
30.10.2017
224
49
Привет, начал изучать 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();
            }
        }
    }
}
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →

Популярный контент

🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab