Serijski port (COM) kao komponenta

↑ Nazad

SerialPort već nasleđuje Component, pa je dovoljno nasleđivanje. Paket: System.IO.Ports (NuGet).

SerialPortComponent.cs

using System.ComponentModel;
using System.IO.Ports;

namespace WinFormsApp_test
{
    /// <summary>
    ///  SerialPort kao non-visual komponenta u Toolbox-u (u .NET-u nije tamo podrazumevano).
    /// </summary>
    [ToolboxItem(true)]
    [DesignerCategory("Code")]
    public class SerialPortComponent : SerialPort
    {
        public SerialPortComponent() { }

        public SerialPortComponent(IContainer container)
        {
            container.Add(this);
        }
    }
}

Upotreba

  1. Prevuci SerialPortComponent na formu.
  2. Properties: PortName, BaudRate, DataBits, Parity, StopBits, Handshake, ReadTimeout...
  3. Events (⚡): DataReceived, ErrorReceived, PinChanged.

Pažnja: DataReceived je na pozadinskoj niti

Ovo je originalni SerialPort, pa event stiže sa pozadinske niti. Direktno menjanje kontrola baca cross-thread operation:

private void serialPortComponent1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    string data = serialPortComponent1.ReadExisting();
    BeginInvoke(() => textBox1.AppendText(data));
}

Ako podaci stižu brzo (mnogo poruka u sekundi), umesto BeginInvoke po poruci koristi isti obrazac kao za log: red + tajmer (stranica Dugačak posao).

Izvor: 02-serijski-port.md