Witam,
mam następujący problem. Cały czas się uczę.
Program w WinForms z wykorzystaniem SerialPortu odbiera i wyświetla mi dane na labelce, która znajduje się na formatce.
Przy wyświetlaniu danych, działają mi oba rozwiązania - ShowData i ReceivedText
W drugim etapie chciałem wykorzystać instancję klasy, która zawiera SerialPort.
Dane w obrębie tego obiektu również przychodzą, ale nie wiem jak przerzucić je do Form1 i wyświetlić.
Wiem, wiem, SOLIDNE podstawy, cały czas się uczę, nie idę na łatwiznę, ale czasem dochodzę do takich momentów i nie mogę ruszyć dalej.
W zamieszczonym kodzie zamieściłem tylko jedną linijkę z konfiguracji SerialPortu, z dodaniem zdarzenia, żeby nie zaciemniać kodu.
Z góry dziękuję za pomoc.
using System;
using System.IO.Ports;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp4
{
public partial class Form1 : Form
{
public SerialPort myserialport;
public string datain;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//KOD DLA SERIALPORT W OBRĘBIE FORM1
myserialport = new SerialPort();
//TUTAJ TYLKO JEDNA LINIJA KODU Z KONFIGURACJI, ŻEBY NIE ZACIEMNIAĆ KODU
myserialport.DataReceived += new SerialDataReceivedEventHandler(mydatareceive);
//KOD DLA SERIALPORT W PRZY PRÓBIE ZBUDOWANIA KLASY RS232 Z ZAWARTYM W NIEJ SERIALPORTEM
RS232 rS232 = new RS232();
}
public void mydatareceive(object sender, SerialDataReceivedEventArgs e)
{
datain = myserialport.ReadExisting();
//PIERWSZA OPCJA - Z WYWOŁANIE ShowData
this.Invoke(new EventHandler(ShowData));
//DRUGA OPCJA
ReceivedText(datain);
}
private void ShowData(object sender, EventArgs e)
{
label_Odebrane.Text = datain;
}
private void ReceivedText(string text)
{
MethodInvoker methodInvokerDelegate = delegate ()
{
label_Odebrane.Text = text;
};
if (this.InvokeRequired)
this.Invoke(methodInvokerDelegate);
else
methodInvokerDelegate();
}
}
public class RS232
{
public SerialPort myserialport;
public string datain;
public RS232()
{
myserialport = new SerialPort();
//TUTAJ TYLKO JEDNA LINIJA KODU Z KONFIGURACJI, ŻEBY NIE ZACIEMNIAĆ KODU
myserialport.DataReceived += new SerialDataReceivedEventHandler(mydatareceive);
}
public void mydatareceive(object sender, SerialDataReceivedEventArgs e)
{
datain = myserialport.ReadExisting();
//JAK PRZENIEŚĆ Z TEGO MIEJSCA ODCZYTANY WYNIK I WYŚWIETLIĆ W LABELCE WIDOCZNEJ NA FORM1
}
}
}