728x90
반응형
가끔 사용하는 C# Serial 통신
사용할때 마다 잊어버려서 기록해놓으려고 한다.
UI는 WPF로 작성
using System;
using System.Collections;
using System.IO.Ports;
using System.Threading;
using System.Windows;
using System.Windows.Threading;
namespace robot_arduino_test
{
public partial class MainWindow : Window
{
Queue Data = new Queue(); //데이터 저장 큐
SerialPort sp = new SerialPort();
string T_msg = ""; //WPF Text 저장용
public MainWindow()
{
InitializeComponent();
cbx_Port.ItemsSource = SerialPort.GetPortNames();
Thread t = new Thread(text);
t.IsBackground = true;
t.Start();
}
private void btn_Conn_Click(object sender, RoutedEventArgs e)
{
if (!sp.IsOpen)
{
sp.PortName = cbx_Port.Text;
sp.BaudRate = Convert.ToInt16(cbx_BaudRate.Text);
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Parity = Parity.None;
sp.DataReceived += new SerialDataReceivedEventHandler(serial_Received);
sp.Open();
lbl_Conn.Content = "Port Connected!";
}
else
{
lbl_Conn.Content = "Already Connected!";
}
}
private void serial_Received(object sender, SerialDataReceivedEventArgs e)
{
string getData = sp.ReadExisting();
Data.Enqueue(getData);
Thread.Sleep(1);
}
private void text()
{
while (true)
{
if (Data.Count > 0)
{
Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
{
string msg = DateTime.Now.ToString("HH:mm:ss.fff");
var ReceiveData = Data.Dequeue();
msg = string.Format("{0} : {1}\r\n", msg, ReceiveData);
T_msg = string.Format("{0} : {1}", T_msg, msg);
T_text_list.Text = T_msg;
T_text_list.SelectionStart = T_text_list.Text.Length;
T_text_list.ScrollToEnd();
}));
}
Thread.Sleep(10);
}
}
private void btn_Close_Click(object sender, RoutedEventArgs e)
{
if (sp.IsOpen)
{
sp.Close();
lbl_Conn.Content = "Port Close!";
}
else
{
lbl_Conn.Content = "Already Close!";
}
}
}
}
728x90
반응형
'.Net > WPF' 카테고리의 다른 글
.NetCore 배포 폴더 만들기 (0) | 2023.06.12 |
---|---|
C#/WPF MainWindow Dual monitor setup (0) | 2022.09.16 |
댓글