Я потратил несколько часов на отладку и нашел выяснилось, что ошибка исходит от «mySerialPort.BaseStream.EndRead». Я не могу найти ответа, поэтому попытался создать небольшой проект, чтобы попытаться создать его с нуля. По-прежнему выдает ошибку:
Код: Выделить всё
using System;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Windows;
namespace InfoCOM
{
public partial class MainWindow : Window
{
private bool isListening = false;
SerialPort mySerialPort = new SerialPort("COM4");
string resultString;
public MainWindow()
{
InitializeComponent();
}
private void stopButton(object sender, RoutedEventArgs e)
{
if (!isListening)
{
mySerialPort.Close();
File.WriteAllText("text.txt", resultString);
MessageBox.Show("text written in text.txt");
resultString = "";
}
}
private void Listen()
{
if (!mySerialPort.IsOpen || !isListening) return;
byte[] buffer = new byte[65536];
mySerialPort.BaseStream.BeginRead(buffer, 0, buffer.Length, ar =>
{
try
{
if (mySerialPort.IsOpen && isListening)
{
int bytesRead = mySerialPort.BaseStream.EndRead(ar);
if (bytesRead > 0)
{
byte[] received = new byte[bytesRead];
Buffer.BlockCopy(buffer, 0, received, 0, bytesRead);
string receivedData = Encoding.UTF8.GetString(received);
resultString += receivedData;
Dispatcher.Invoke(() =>
{
Nume.Text = resultString;
});
// Continue listening
Listen();
}
}
}
catch (IOException ioEx)
{
Dispatcher.Invoke(() => MessageBox.Show($"I/O Error: {ioEx.Message}"));
isListening = false;
}
catch (Exception ex)
{
Dispatcher.Invoke(() => MessageBox.Show($"Unexpected Error: {ex.Message}"));
isListening = false;
}
}, null);
}
private void startButton(object sender, RoutedEventArgs e)
{
try
{
mySerialPort.PortName = "COM4";
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.Open();
isListening = true;
Listen();
}
catch(Exception ex)
{
MessageBox.Show("Something went wrong!");
MessageBox.Show(ex.ToString());
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... hread-exit