C# can't open serial port from application launch successfully

不羁的心 提交于 2019-12-14 02:14:22

问题


So I have this port that I'm opening and saving the name of the port in a setting of my application. When I load the form it tries to open the port however fails to do so. Only after clicking on my "open port" button that has the EXACT same code does the port open. And then If I click my "close port" button and reopen the form it works! It automatically opens the port for me. However it's only if I'm fast enough. If I leave the application closed (and thus port closed) for say 10-15 seconds and reopen the application, I'll get my error thrown at me. What's the reason for this??

The code used at launch and in my "open port" button:

        mySerialPort.createPort(Properties.Settings.Default.portName);

        if (!mySerialPort.isOpen)
        {
            try
            {
                mySerialPort.openSerialPort();
            }
            catch
            {
                MessageBox.Show("Error: Could not open Serial port " + Properties.Settings.Default.portName, "Port Opening Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            if (mySerialPort.isOpen)
            {
                portActiveStatusLbl.Text = Properties.Settings.Default.portName + " OPEN";
                portActiveStatusLbl.ForeColor = Color.Green;
            }
        }

and here's mySerialPort Class:

    public static class SerialPortConfig
{
    public static SerialPort mySerialPort = new SerialPort();
    public static string myString = "";
    public static bool isOpen { get { return mySerialPort.IsOpen; } }


    public static void createPort (string portName)
    {
        if (portName == "")
            portName = "COM1";
        mySerialPort.PortName = portName;
        mySerialPort.BaudRate = 2400; //Depending on the hardware used this may change, mitutoyo input tool asks for 2400 baud
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.RequestToSend; //DO NOT SET TO NONE

        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    }

    public static void openSerialPort()
    {
        mySerialPort.Open();
    }

    public static void closeSerialPort()
    {
        mySerialPort.Close();
    }

    private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting(); //stores the char that fired the event into 'indata'
        myString += indata;
        if (indata.Contains("\r")) //check to see if char received indicates end of measurement
        {
            if (myString == "911\r") //911 is the code given when the micrometer is off, so we have it do nothing
                myString = "";
            else
            {
                myString = myString.Substring(4, 8);
                Form1.instance.pendingMeasurement = true;
            }
        }
    }
}

来源:https://stackoverflow.com/questions/40875018/c-sharp-cant-open-serial-port-from-application-launch-successfully

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!