C#COM端口未配置

时间:2014-11-09 18:10:25

标签: c# com serial-port dispose

这是我在这里的第一次互动!我自己学习C#,除了我试图摆脱的错误之外还会有很多错误,请耐心等待:)

我正在开发一个非常基本的应用程序,让您与串口进行交互,就像集成在Arduino中的工具一样。 有一个用于连接/断开连接的按钮,它会使用一个新数据保持表单更新的后台工作器进行着陆/停止。我试图移动.close();代码中的每个位置,但没有任何改变,当我再次尝试打开它时,它会捕获异常。其他应用也无法访问。我想我根本不知道我在做什么:)

你能帮我发布资源吗?

此操作涉及的代码:

 private void ConnectB_Click(object sender, EventArgs e)
    {
        if (!connected)
        {
            int baud = Convert.ToInt32(baudRate.SelectedItem.ToString());
            COMport = new SerialPort(COMpick.SelectedItem.ToString(), baud, Parity.None, 8, StopBits.One);
            try
            {
                COMport.Open();
                connected = true;
                ConnectB.Text = "Disconnect";
            }
            catch (ArgumentOutOfRangeException)
            {
                MessageBox.Show("Baud rate not valid.");
                connected = false;
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Port name not valid.");
                connected = false;
            }
            catch (UnauthorizedAccessException)
            {
                MessageBox.Show("Access denied, try close applications that may using the port.");
                connected = false;
            }

            if (backWorker.IsBusy != true)
            {
                backWorker.RunWorkerAsync();
            }
        }
        else
        {
            connected = false;

            backWorker.CancelAsync();

           ConnectB.Text = "Connect";
        }
    }

private void backWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

        while (true)
        {
            if (worker.CancellationPending == true)
            {
                e.Cancel = true;
                break;
            }
            else if(COMport.IsOpen)
            {
                // Get data and print it in the form
                try
                {
                    inbox = COMport.ReadLine() + '\n';
                }
                catch (InvalidOperationException) { }
               //Scroll down the form, passing something useless to make it work
                worker.ReportProgress(inbox.Length);
            }
        }

    }

   private void backWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        this.COMport.Close();
        this.COMport.Dispose();
    }

谢谢!

0 个答案:

没有答案