C# try/catch EF
От: ronik  
Дата: 16.03.15 12:29
Оценка:
Всем привет!
По ходу зашился совсем и не могу понять в чём косяк!
В потоке опрашиваю некое устройство по СОМ-порту, устройство имеет адрес — 2. Отправляю сообщение в порт, но к примеру ошибся с адресом и указал — 3. Пытаюсь ловить исключение через try/catch. Не выходит!
                    try
                    {
                        serialPort.Write(read, 0, read.Length);
                    }
                    catch
                    {
                        var c = context.Log;
                        Logs logs = new Logs();
                        logs.Date = DateTime.Now;
                        logs.Event = "Ошибка записи в порт!";
                        c.Add(logs);
                        context.SaveChanges();   // пишим сообщение в логи*/
                    }

Т.е. если поставить точку останова на var c, указатель туда не прилетает?
Re: C# try/catch EF
От: Vaako Украина  
Дата: 16.03.15 12:32
Оценка:
Здравствуйте, ronik, Вы писали:

R>Т.е. если поставить точку останова на var c, указатель туда не прилетает?


В режиме Debug? А то в случае Release компилятор мог "прооптимизировать" переменную которая нигде не используется.
Re[2]: C# try/catch EF
От: ronik  
Дата: 16.03.15 12:36
Оценка:
Здравствуйте, Vaako, Вы писали:

V>Здравствуйте, ronik, Вы писали:


R>>Т.е. если поставить точку останова на var c, указатель туда не прилетает?


V>В режиме Debug? А то в случае Release компилятор мог "прооптимизировать" переменную которая нигде не используется.


Да, в дебаг!
Re: C# try/catch EF
От: andrey82  
Дата: 16.03.15 12:39
Оценка:
Здравствуйте, ronik, Вы писали:

R>Всем привет!

R>По ходу зашился совсем и не могу понять в чём косяк!
R>В потоке опрашиваю некое устройство по СОМ-порту, устройство имеет адрес — 2. Отправляю сообщение в порт, но к примеру ошибся с адресом и указал — 3. Пытаюсь ловить исключение через try/catch. Не выходит!

"Адрес" — это что? Какая-то из составных частей сообщения, хранящаяся в переменной read?
Тогда, собственно, почему должно возникнуть исключение ?
Запись в COM порт удалась? Все, на этом работа WinAPI и соотв. оберток .NET (SerialPort) закончилаcь. И неважно, что устройство может быть вообще физически отключено от порта, работа с его протоколом, в том числе ожидание и проверка ответов — это уже задача приложения.
Re: C# try/catch EF
От: vitz  
Дата: 16.03.15 12:58
Оценка:
Здравствуйте, ronik, Вы писали:

R>
R>                    try
R>                    {
R>                        serialPort.Write(read, 0, read.Length);
                          throw new Exception("bla-bla");
R>                    }
R>                    catch
R>                    {
R>                        var c = context.Log;
R>                        Logs logs = new Logs();
R>                        logs.Date = DateTime.Now;
R>                        logs.Event = "Ошибка записи в порт!";
R>                        c.Add(logs);
R>                        context.SaveChanges();   // пишим сообщение в логи*/
R>                    }
R>

R>Т.е. если поставить точку останова на var c, указатель туда не прилетает?
прилетает?
Отредактировано 16.03.2015 12:59 vitz . Предыдущая версия .
Re[2]: C# try/catch EF
От: ronik  
Дата: 16.03.15 13:05
Оценка:
Здравствуйте, andrey82, Вы писали:

A>Здравствуйте, ronik, Вы писали:


R>>Всем привет!

R>>По ходу зашился совсем и не могу понять в чём косяк!
R>>В потоке опрашиваю некое устройство по СОМ-порту, устройство имеет адрес — 2. Отправляю сообщение в порт, но к примеру ошибся с адресом и указал — 3. Пытаюсь ловить исключение через try/catch. Не выходит!

A>"Адрес" — это что? Какая-то из составных частей сообщения, хранящаяся в переменной read?

A>Тогда, собственно, почему должно возникнуть исключение ?
A>Запись в COM порт удалась? Все, на этом работа WinAPI и соотв. оберток .NET (SerialPort) закончилаcь. И неважно, что устройство может быть вообще физически отключено от порта, работа с его протоколом, в том числе ожидание и проверка ответов — это уже задача приложения.

Да, пожалуй Вы правы! Адрес действительно составная часть сообщения!
Re[2]: C# try/catch EF
От: ronik  
Дата: 16.03.15 13:06
Оценка:
Здравствуйте, vitz, Вы писали:

V>Здравствуйте, ronik, Вы писали:


R>>
R>>                    try
R>>                    {
R>>                        serialPort.Write(read, 0, read.Length);
V>                          throw new Exception("bla-bla");
R>>                    }
R>>                    catch
R>>                    {
R>>                        var c = context.Log;
R>>                        Logs logs = new Logs();
R>>                        logs.Date = DateTime.Now;
R>>                        logs.Event = "Ошибка записи в порт!";
R>>                        c.Add(logs);
R>>                        context.SaveChanges();   // пишим сообщение в логи*/
R>>                    }
R>>

R>>Т.е. если поставить точку останова на var c, указатель туда не прилетает?
V>прилетает?

Так прилетает! Только ен очень понял, как это применить?
Отредактировано 16.03.2015 13:10 ronik . Предыдущая версия .
Re[3]: C# try/catch EF
От: andrey82  
Дата: 16.03.15 13:19
Оценка:
Здравствуйте, ronik, Вы писали:

R>Так прилетает! Только ен очень понял, как это применить?


Тут нужно самостоятельно реализовывать логику обмена с устройством — отправку запроса, ожидание приема, проверку ответа (напр., ответило именно то устройство, которое было запрошено, формат сообщения соотвествует протоколу, контрольная сумма сообщения в порядке — если есть в протоколе). Желательно также учесть всякие нештатные ситуации — устройство отключили от порта (в том числе в ходе работы), перепутали с другим, подключили два устройства на один порт (хотя это зависит от физического уровня подключения).
Впрочем, если протокол устройства стандартный, можно поискать готовые реализации протоколов, там вполне может быть все сделано в виде удобных методов вида Init/GetState/ReadData... которые все проверят внутри и выбросят осмысленные исключения как результат анализа ответов устройства (какой-нибудь TimeoutException при отсутствии ответа от устройства, FormatException при получении сообщения неправильного формата и т.п.).
Re[3]: C# try/catch EF
От: vitz  
Дата: 16.03.15 13:41
Оценка:
Здравствуйте, ronik, Вы писали:
R>Так прилетает! Только ен очень понял, как это применить?
Проблема не в try/catch.
    //исключение не бросает
    serialPort.Write(read, 0, read.Length);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.