Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения - 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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д