void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
//получаем ответ
answer += sp.ReadLine();//исключение выпадает здесь
}
catch (Exception exc)
{
StreamWriter sw = new StreamWriter(@"c:\exc");
sw.WriteLine(exc.ToString());
sw.Close();
}
}
private void ExecuteCommands()
{
//выполнение комманд требующих авторизации
здесь команды выполняются нормально
//получаем введеные в память телефоны
sp.WriteLine("AT+CPBR=1,5");
System.Threading.Thread.Sleep(500);
string[] cmd = ParseAnswer2(answer);//анализируем ответ
string tmp;
string[] s1 = null;
string delim = ",";
for (int i = 1; i < 6; i++)
{
tmp = FindMatch(cmd, "\"(.*)\"");
s1 = tmp.Split(delim.ToCharArray(), 3);
lstPhoneNum.Items.Add(s1[0].Replace("\"", ""));
}
sp.DiscardInBuffer();
answer = "";
}
private string[] ParseAnswer2(string answer)
{
//здесь выполняется анализ ответа
string delimStr = "\n";
char[] delimiter = delimStr.ToCharArray();
string[] split = null;
int n = 7;
split = answer.Split(delimiter, n);
return split;
}
Исключение при работе с СОМ-портом
командах все нормально но на одной из команд выпадает исключение. Т.е сначала команда нормально возращает результат,
а потом уже выпадает исключение.
System.IO.IOException: Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения.
at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
at System.IO.Ports.SerialStream.EndRead(IAsyncResult asyncResult)
at System.IO.Ports.SerialStream.Read(Byte[] array, Int32 offset, Int32 count, Int32 timeout)
at System.IO.Ports.SerialStream.Read(Byte[] array, Int32 offset, Int32 count)
at System.IO.Ports.SerialPort.InternalRead(Char[] buffer, Int32 offset, Int32 count, Int32 timeout, Boolean countMultiByteCharsAsOne)
at System.IO.Ports.SerialPort.ReadTo(String value)
at System.IO.Ports.SerialPort.ReadLine()
at Novitek.Form1.sp_DataReceived(Object sender, SerialDataReceivedEventArgs e) in D:\1\Novitek\Novitek\Form1.cs:line 74
Ну и соответственно при закрытии порта программа намертво зависает Как обработать это исключение чтобы можно было
нормально продолнить работу. В чем вообще могут быть грабли ? Вот код:
Код:
[color=red]Для оформления кода используй теги. Модератор. [/color]
А как порт сконфигурирован? За выставленный таймаут (Свойства ReadTimeout) ответ в порт приходит?
Хм. Вы бы хоть смотрели дату начала темы. ИМХО, задача едва ли актуальна спустя два года.:)
Сорь, вы правы, но ничего страшного, кто-то будет возиться с такой-же проблемой, а очень неприятно видеть вопросы без ответов;)
Тоже самое было - надо поменять serialport.WriteLine на serialport.ReadExisting