Использование переменной SerialPort через MainWindow - PullRequest
0 голосов
/ 27 февраля 2020

Я использую функцию, чтобы найти мое устройство на соответствующем последовательном 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 и иметь возможность использовать мой «порт» ?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

возвращает экземпляр 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");
}
0 голосов
/ 27 февраля 2020

Использовать глобальную переменную

    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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...