Working on an application that uses TWO Serial Ports. It basically takes data from one port and pass it to the other; and vise verse.
To aid in troubleshooting the system it's doing this for, I wanted to put the Received Data into a ListBox on the Main UI Window. The serialPort_DataReceived method is static and can't cross-thread to the UI Controls. Searching online for a way to do this, I saw I should use Invoke. I've tried to get that to work but have not been able. Any ideas would be greatly appreciated. Code follows ..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
namespace SerialPortTest
{
public partial class Form1 : Form
{
static SerialPort serialPortPIC2;
public delegate void AddListItemsDelegateType(String text);
public AddListItemsDelegateType AddListItemsDelegate;
public Form1()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
this.Load += StartApplication;
}
// Start Application
private void StartApplication(object sender, EventArgs e)
{
serialPortPIC2 = new SerialPort("COM6");
serialPortPIC2.Open();
serialPortPIC2.BaudRate = 19200;
serialPortPIC2.ReadTimeout = 500;
serialPortPIC2.NewLine = System.Char.ToString('\r');
// Create new Serial COM Port Data Received Event Handler
serialPortPIC2.DataReceived += new SerialDataReceivedEventHandler(serialPortPIC2_DataReceived);
// Create new AddListItemsDelegateType
AddListItemsDelegate += new AddListItemsDelegateType(AddListItemsMethod);
// Send READY Command to PIC2 - reply is "OK\r"
serialPortPIC2.WriteLine("ready");
}
// Add List Items Method
public void AddListItemsMethod(String text)
{
listBox1.Items.Add(text); // listBox1 is Designer created ListBox
}
// Serial COM Port Data Received Event Handler
public static void serialPortPIC2_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = sender as SerialPort;
string indata = sp.ReadLine();
string outdata = indata.TrimEnd('\r');
// want to Invoke AddListItemsDelegate but VS doesn't 'see' "AddListItemsMethod" or "AddListItemsDelegate"
// only "AddListItemsDelegateType"
}
}
}