C# WPF «Операция ввода-вывода была прервана из-за выхода из потока или запроса приложения»C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# WPF «Операция ввода-вывода была прервана из-за выхода из потока или запроса приложения»

Сообщение Anonymous »

Я создал приложение, которое получало данные от последовательного порта и работало с ним. Он работал год или два, и несколько дней назад я попытался снова открыть его, и по какой-то причине он выдает ошибку, которую я указал в заголовке.
Я потратил несколько часов на отладку и нашел выяснилось, что ошибка исходит от «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());
}
}
}
}
Я пытался проверить Arduino IDE, и Arduino выдала хорошие данные. Я также попытался использовать старую функцию «ReceiveData», и она работает. Я просто не понимаю, почему это больше не работает. Я также попробовал более старую версию своего приложения (из той, которую я зафиксировал до внесения изменений), но она все еще не работает. Я больше понятия не имею.

Подробнее здесь: https://stackoverflow.com/questions/792 ... hread-exit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»