Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过Main窗口使用SerialPort变量_C#_Wpf_Serial Port_Global Variables - Fatal编程技术网

C# 通过Main窗口使用SerialPort变量

C# 通过Main窗口使用SerialPort变量,c#,wpf,serial-port,global-variables,C#,Wpf,Serial Port,Global Variables,我正在使用一个函数在正确的串行COM端口上查找我的设备,该端口通过它发送一个消息,以便我可以通过我的WPF应用程序识别它。我想做的是,在我所有的空隙中使用SerialPort变量 private string CheckPort(){ string[] listPort = SerialPort.GetPortNames(); foreach (string namePort in listPort){ SerialPort port = new SerialPo

我正在使用一个函数在正确的串行COM端口上查找我的设备,该端口通过它发送一个消息,以便我可以通过我的WPF应用程序识别它。我想做的是,在我所有的空隙中使用SerialPort变量

private string CheckPort(){
    string[] listPort = SerialPort.GetPortNames();
    foreach (string namePort in listPort){
        SerialPort port = new SerialPort(namePort, 9600);
        if(!port.IsOpen){
            port.Open();
            string data = port.ReadTo("\r\n");
            if (data == "A"){
                port.Write("777"); //to make it stop sending "A"
                return namePort;
            }
        }
    }
}

public MainWindow(){
    string target = CheckPort();
    SerialPort port = new SerialPort(target, 9600);
    InitializeComponent();
}

private void Button_ClickClose(object sender, RoutedEventArgs e){
    blablabla
    port.ReadTo("\r\n");  // port doesn't exist in the current context
    port.Write("hey");
}
那么,有没有一种方法可以保持我的CheckPort功能并能够使用我的端口呢

使用全局变量

    private string CheckPort(){
        string[] listPort = SerialPort.GetPortNames();
        foreach (string namePort in listPort){
            if(!Port.IsOpen){
                Port.Open();
                string data = Port.ReadTo("\r\n");
                if (data == "A"){
                    Port.Write("777"); //to make it stop sending "A"
                    return namePort;
                }
            }
        }
    }

    public MainWindow(){
        string target = CheckPort();
        Port = new SerialPort(target, 9600);
        InitializeComponent();
    }

    private void Button_ClickClose(object sender, RoutedEventArgs e){
        blablabla
        port.ReadTo("\r\n");  // port doesn't exist in the current context
        port.Write("hey");
    }

    private SerialPort Port;

从方法返回SerialPort的实例,并将其存储在窗口字段而不是局部变量中:

private SerialPort CheckPort()
{
    string[] listPort = SerialPort.GetPortNames();
    foreach(string namePort in listPort)
    {
        SerialPort port = new SerialPort(namePort, 9600);
        if (!port.IsOpen)
        {
            port.Open();
            string data = port.ReadTo("\r\n");
            if (data == "A")
            {
                port.Write("777"); // to make it stop sending "A"
                return port;
            }
        }
    }
    return null;
}

SerialPort port;

public MainWindow()
{
    port = CheckPort();
    InitializeComponent();
}

private void Button_ClickClose(object sender, RoutedEventArgs e)
{
    if (port == null) return;
    port.ReadTo("\r\n");
    port.Write("hey");
}