gpt4 book ai didi

C# 串行端口线程,一段时间后应用程序崩溃

转载 作者:行者123 更新时间:2023-11-30 17:59:42 28 4
gpt4 key购买 nike

我正在编写一个从 COM 端口读取数据并显示在屏幕上的程序。当数据读取频率较低时,它工作得很好并且可以运行一整天。但是,当每秒发送数据时,程序每 30 分钟崩溃一次。错误代码为c0000005访问冲突。

     void Start()
{
_serialPort = new SerialPort(TempPortName, 9600, Parity.None, 8, StopBits.One);
_serialPort.Handshake = Handshake.None;
_serialPort.ReadTimeout = 1000;
_serialPort.ReadBufferSize = 100000;
readThread = new Thread(Read);
readThread.Start();
}

void Read()
{
string MessageSection = "";
char[] end = {'\r'};

//string MessageSection = "";
while (readData)
{
Thread.Sleep(10);
if (_serialPort.IsOpen)
{

string message = "test";

try
{
message = ((char)(_serialPort.ReadByte())).ToString();

}
catch
{
message = "";
}

if (message != "")
{

message = MessageSection + message;

string[] MessageArray = message.Split(end);
if (!message.EndsWith("\r"))
{
MessageSection = MessageArray[MessageArray.Length - 1];
}
else
{
if(message.Length>0)
{
doSomething();
}
MessageSection = "";
}
}
else {
}

}
else
{
try
{
_serialPort.Open();

}

catch
{
print("Error");
}
}
}

}

我正在使用 Unity 3D,是否与缓冲区大小有关?

最佳答案

这不是使用 while 循环 进行串行端口通信的正确方式。您正在注册SerialPort.DataReceived Event在端口上接收传入数据。

这是来自 MSDN 的示例代码

using System;
using System.IO.Ports;

class PortDataReceived
{
public static void Main()
{
SerialPort mySerialPort = new SerialPort("COM1");

mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;

mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

mySerialPort.Open();

Console.WriteLine("Press any key to continue...");
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}

private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
}

关于C# 串行端口线程,一段时间后应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10876319/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com