Как использовать последовательный порт в приложении Windows Forms? - PullRequest
1 голос
/ 18 октября 2011

Я пытаюсь создать C # из простой программы с четырьмя кнопками: влево, вправо, вверх и вниз.затем, когда кнопка первоначально нажата (но не отпущена), она отправит последовательную линию.затем, когда кнопка не нажата (пользователь отпускает левую кнопку мыши), я хочу отправить еще одну последовательную команду.

проблема заключается в том, что каждый void OnClick... (object sender, System.EventArgs e) отделен от других, а последовательный порт "порт" нене работает на протяжении всей программы.у меня есть в основном для последовательного использования:

SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
port.Open();

я не хотел открывать и закрывать последовательный порт каждый раз, когда я хочу что-то отправить, потому что он может быть слишком близко друг к другу (с точки зрения времени) иможет вызвать проблему "последовательный порт в использовании" и / или задержку при отправке последовательной линии.

уменьшилось настолько, насколько я мог.

код:

    public class EAS_ControlForm : System.Windows.Forms.Form
    {
        private Button Up4;
        private Button Down3;
        private Button Left2;
        private Button Right1;
        public EAS_ControlForm()
        {
            Text = "Etch-a-Sketch Control";
            Down3 = new Button ();
            Up4 = new Button ();
            Left2 = new Button ();
            Right1 = new Button ();

            Down3.Text = "Down";
            Down3.Name = "Down3";
            Down3.Size = new System.Drawing.Size (72, 30);
            Down3.Location = new System.Drawing.Point ((ClientRectangle.Width - Down3.Size.Width) / 2, ClientRectangle.Height - 10);
            Controls.AddRange(new System.Windows.Forms.Control[] {this.Down3});
            Down3.Click += new System.EventHandler(OnClickDown3);

            Up4.Text = "Up";
            ///...button up4 stuff here like down 3 above.

            Left2.Text = "Left";
            ///...button left2 stuff here like down 3 above.

            Right1.Text = "Right";
            ///...button right1 stuff here like down 3 above.
        }

        static public void Main() 
        {
            SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            port.Open();

            Application.Run(new EAS_ControlForm());
        }

        void OnClickDown3 (object sender, System.EventArgs e)
        {
            port.Write("<3,100>");
        }

        void OnClickUp4 (object sender, System.EventArgs e)
        {
            port.Write("<4,100>"); //error here because of port initialization not in same code
        }

        void OnClickLeft2 (object sender, System.EventArgs e)
        {
            port.Write("<2,100>"); 
        }

        void OnClickRight1 (object sender, System.EventArgs e)
        {
            port.Write("<1,100>");
        }
    }
}

Ответы [ 3 ]

1 голос
/ 18 октября 2011
Try introducing a member function to share the serial port reference or send it through the constructor.

    SerialPort port ;
    public void SetSerialPort(SerialPort p_serialPort )
    {
        port = p_serialPort;
    }

    static public void Main() 
    {
        SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
        port.Open();
        EAS_ControlForm myform = new EAS_ControlForm();
        myform.SetSerialPort(port);

        Application.Run(myform);
    }

Посмотрите, хотите ли вы этого.

1 голос
/ 18 октября 2011
static SerialPort port;
static public void Main()          
{             
    port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
    port.Open();              
    Application.Run(new EAS_ControlForm());         
} 
0 голосов
/ 18 октября 2011

Просто определите port как члена класса.Инициализируйте его в конструкторе формы или в событии Load.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...