Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения - C#
Формулировка задачи:
Такая проблема.
Прибор посылает каждые 4 сек данные. Считываю с порта по событию DataReceived.
Закрываю порт по кнопке
ПрочитатьToolStripButton
. Так вот, если нажать эту кнопку не в нужный момент, выскакивает сообщение:Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения.
Как избавиться от этой проблемы? Кусок кода:ComPort.DataReceived += new SerialDataReceivedEventHandler(Port_Read);
void Port_Read(object sender, SerialDataReceivedEventArgs e)
{
try
{
for (int i = 0; i < 344; i++)
{
rez[i] = Convert.ToByte(ComPort.ReadByte());
}
SetText(Encoding.ASCII.GetString(rez)); //вызов делегата
}
catch (Exception e3)
{
MessageBox.Show(e3.Message);
}
}
//Открытие - Закрытие порта
private void ПрочитатьToolStripButton_Click(object sender, EventArgs e)
{
try
{
if (ComPort.IsOpen)
{
toolStripComboBox1.Enabled = false;
ComPort.Close();
}
else
{
ComPort.Open();
}
}
catch (Exception e1)
{
MessageBox.Show(e1.Message);
}
}
Такая же ошибка может выскакивать, если вытаскиваешь кабель RS с прибора
не в нужный момент Решение задачи: «Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения»
textual
Листинг программы
if (ComPort.IsOpen)
{
toolStripComboBox1.Enabled = false;
ComPort.DataReceived -= Port_Read;
ComPort.Close();
}
else
{
ComPort.DataReceived += Port_Read;
ComPort.Open();
}