从单独的表单C#设置串行端口

时间:2018-03-27 17:56:07

标签: c# .net

我需要将一个串口从一种形式传递到另一种形式,我在以另一种形式使用它后设置端口时遇到问题。 我已经搜索了这个答案的高低,但我可能只是不理解这个问题的其他答案。我确切地知道我遇到的问题是什么我只能弄明白如何解决它。我是C#的新手,但在C ++方面有着不错的背景。在C ++中,我只是通过引用来解决这个问题。我试过但是无济于事

//In Form 2     
private void Connect_Click(object sender, EventArgs e)
{
    if (isConnected)
    {
        form1.unmountArduino();
    }
    else
    {
        portF2 = form1.borrowPort();
        bool success = form1.mountArduino(ComCombo.Text,portF2);
        if (success)
        {
            this.Close(); //If we connect close the form
        }
        else
        {
            Application.Exit(); //If it fails just close application for now 
        }
    }
}

// In form 1
public bool mountArduino(string selectedPort, SerialPort port)
{

    try
    {

        port = new SerialPort(selectedPort, 9600, Parity.None, 8, StopBits.One);
        port.Open();
        isConnected = port.IsOpen;
        port.Write("#STAR\n");  //This Command Writes just fine
        returnPort(port);      // Setter Function
        return true;

    }
    catch
    {
        MessageBox.Show("Unable to Connect to COM Port");
        return false;
    }

}
public SerialPort borrowPort()
{
    return port;
}
public void returnPort(SerialPort usedPort)
{
    this.port = usedPort;
}
private void stepForward_Click(object sender, EventArgs e)
{
    port.Write("#FO"+stepBox.Text+"\n"); // Here is where I get my error
                                         //Exception: (Object reference not set to an instance of an object)
}

所有这些代码都没有问题,除非我尝试单击表单上的按钮并通过串行端口发送另一个命令。然后它说端口超出范围并且为空。这是有道理的,因为我在一个函数中创建了端口,但在我看来, setter函数应该已经处理好了。 感谢您的帮助,我已经到处寻找,但似乎找不到为什么setter功能无效的确切答案。

0 个答案:

没有答案