none
Видимость mySerialPort в других функциях. RRS feed

  • Вопрос

  • Прошу сильно не пинать, только начинаю изучать С#. Как объявить  mySerialPort чтобы его можно было использовать в других местах(функциях).
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO.Ports;
    
    namespace COM_Na_prerivanii
    {
        class Program
        {
            public static void Main(string[] args)
            {
               SerialPort mySerialPort = new SerialPort("COM5");
    
                mySerialPort.BaudRate = 115200;
                mySerialPort.Parity = Parity.None;
                mySerialPort.StopBits = StopBits.One;
                mySerialPort.DataBits = 8;
                mySerialPort.Handshake = Handshake.None;
                mySerialPort.RtsEnable = true;
    
                mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    
                mySerialPort.Open();
    
                Console.WriteLine("Press any key to continue...");
                /*ВОТ ЗДЕСЬ РАБОТАЕТ!!!!!!!*/
                mySerialPort.WriteLine("Press any key to continue...\r\n");
                Console.WriteLine();
                Console.ReadKey();
                mySerialPort.Close();
            }
            public static void Send_Com(string str)
            {
                /*A ЗДЕСЬ НЕТ!!!!!!!!!!*/
                //mySerialPort.WriteLine(str);
            }
            public static void DataReceivedHandler(
                            object sender,
                            SerialDataReceivedEventArgs e)
            {
                SerialPort sp = (SerialPort)sender;
                string indata = sp.ReadExisting();
                Console.WriteLine("Data Received:");
                Console.Write(indata);
                Send_Com(indata);
            /*A ЗДЕСЬ НЕТ!!!!!!!!!!*/
                //mySerialPort.WriteLine(indata);
            }
        }
    }
    

    8 января 2018 г. 18:13

Ответы

  • Доброго времени суток!
    У вас в функции main создан объект SerialPort, а в других функциях он не создан, поэтому у вас не работает.
    В данной ситуации, у вас два варианта:
    1. Создать во всех функциях объекты SerialPort(хочу отметить, что они не содержат то, что есть в main)
    2. Передавать в функции объект SerialPort, созданный в main, и изменять его в функции.
    8 января 2018 г. 20:26
  • Ну, в методе DataReceivedHandler объект SerialPort уже есть - переменная sp. Нужно просто писать sp.WriteLine(indata)

    А в Send_Com нужно передавать, да.

     
    9 января 2018 г. 15:21

Все ответы

  • Доброго времени суток!
    У вас в функции main создан объект SerialPort, а в других функциях он не создан, поэтому у вас не работает.
    В данной ситуации, у вас два варианта:
    1. Создать во всех функциях объекты SerialPort(хочу отметить, что они не содержат то, что есть в main)
    2. Передавать в функции объект SerialPort, созданный в main, и изменять его в функции.
    8 января 2018 г. 20:26
  • Ну, в методе DataReceivedHandler объект SerialPort уже есть - переменная sp. Нужно просто писать sp.WriteLine(indata)

    А в Send_Com нужно передавать, да.

     
    9 января 2018 г. 15:21