Thread thread = new Thread(new ThreadStart(() =>
{
Console.WriteLine("可用串口列表:");
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
Console.WriteLine(port);
}
Console.Write("請輸入要連接的串口(例如COM3):");
string portName = "COM3"; // Console.ReadLine();
SerialPort serialPort = new SerialPort(
portName: portName,
baudRate: 9600,
parity: Parity.None,
dataBits: 8,
stopBits: StopBits.One
);
serialPort.Encoding = Encoding.UTF8; // 設置編碼格式
serialPort.ReadTimeout = 500; // 讀取超時時間(毫秒)
serialPort.WriteTimeout = 500; // 寫入超時時間(毫秒)
int i = 0;
// 注冊數據接收事件
serialPort.DataReceived += async (sender, e) =>
{
var sp = (SerialPort)sender;
try
{
if (sp.IsOpen)
{
string data = sp.ReadExisting();
Console.WriteLine($"[接收] {data}");
// 在 UI 線程上開始作業并立即返回。
if (i % 10 == 0)
{
// 在 UI 線程上開始作業并立即返回。
await Dispatcher.UIThread.InvokeAsync(() => {
this.textBlock.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "稱重數據:" + data;
});
}
}
}
catch (Exception ex)
{
Console.WriteLine($"接收數據時出錯:{ex.Message}");
}
i++;
};
try
{
serialPort.Open();
Console.WriteLine("串口已成功打開。輸入消息發送(輸入 'exit' 退出)...");
}
catch (Exception ex)
{
Console.WriteLine($"打開串口失敗:{ex.Message}");
return;
}
// 發送消息循環
string input;
do
{
input = Console.ReadLine() ?? "";
if (input.Equals("exit", StringComparison.OrdinalIgnoreCase))
break;
try
{
if (serialPort.IsOpen)
{
serialPort.WriteLine(input);
Console.WriteLine($"[發送] {input}");
}
else
{
Console.WriteLine("串口未打開,無法發送。");
}
}
catch (Exception ex)
{
Console.WriteLine($"發送數據時出錯:{ex.Message}");
}
} while (true);
// 關閉串口(using語句會自動處理)
Console.WriteLine("程序退出。");
}));
thread.Start();