| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > While |
| Автор: arkonst 15.11.2007, 09:30 |
| Всем привет! Подскажите пожалуйста, как понять эту запись: while (!mb.SendFc3(Convert.ToByte(txtSlaveID.Text), pollStart, pollLength, ref values)) ; тут в общем то код мне понятен, не понятно для чего там стоит "!" перед mb??? Извеняюсь за тупой вопрос, я конечно понимаю что он символизирует NOT(НЕ) но не могу понять зачем он тут.Для лучшей читабельности ниже привожу полный код. //Read registers and display data in desired format: try { while (!mb.SendFc3(Convert.ToByte(txtSlaveID.Text), pollStart, pollLength, ref values)) ; } catch(Exception err) { DoGUIStatus("Error in modbus read: " + err.Message); } Заранее спасибо за ответ. |
| Автор: QryStaL 15.11.2007, 09:45 | ||
Этот код эквивалентен следующему:
|
| Автор: Wizard_Memfis 15.11.2007, 11:06 |
| Я так понимаю, что вопрос несколько в другом: функция возвращает bool?Если да , QryStaL уже сказал!А вот если нет, то действительно не понятно!!!Он не ругается на это? |
| Автор: thomas 15.11.2007, 11:21 | ||
| Всем привет А мне не понятно, зачем вообще нужен этот while если у него нет сигнатуры.
Как гриться, на фига козе баян? |
| Автор: 1stain 15.11.2007, 11:30 | ||
| видимо функция проверяет порт на наличие данных. Пока данных нет - крутиццо пустой цикл. Как только данные пришли - из цикла выходим. з.ы. глянул сюда http://www.codeproject.com/csharp/modbuscs.asp имхо сделано слегка коряво: насколько я понял, цикл будет крутиццо в случае обрыва связи с устройством до бесконечности... п-моему, лучше сделать примерно так:
|
| Автор: thomas 15.11.2007, 11:34 |
| 1stain, возможно |
| Автор: FREEDEV 15.11.2007, 11:38 |
| thomas, Да вроде бы все корректно . while циклиться пока SendFc3 не вернет false, если в процессе цикла произойдет исключение – вываливаемся в Exception, выполняем DoGUIStatus. Добавлено через 57 секунд оп, уже решилось |
| Автор: 1stain 15.11.2007, 11:45 |
по данному поводу вопрос к ТС: ты читал мсходники того, что используешь? исключения обрабатываются внутри функции SendFc3, а информацию об ошибке несет modbusStatus таким образом, перехват исключений здесь не надобен |
| Автор: FREEDEV 15.11.2007, 11:52 |
| 1stain, я вообще не в курсе работы этой функции, просто выдвинул предположение. ну, тогда исключения от Convert.ToByte(txtSlaveID.Text) кто обработает |
| Автор: 1stain 15.11.2007, 12:04 |
| FREEDEV, я тоже ввобще-то не в курсе работы этой функции по-моему не стоит перехватывать все исключения, без исключения перехват Exception от Convert.ToByte(txtSlaveID.Text) и вывод его message в этом контексте DoGUIStatus("Error in modbus read: " + err.Message); мало чем поможет в плане понятия причины ошибки чтения данных, только собъет с толку. |
| Автор: FREEDEV 15.11.2007, 12:49 | ||
это да, но ятак понимаю что код уже написан кем-то, остается разбираться зачем оно так |
| Автор: arkonst 16.11.2007, 10:31 |
| Привет всем! Смотрю тут такое обсуждение организовалось)) Проясню некоторые моменты...код этот уже готовый и работает вроде нормально...я его вырезал и вставлял в свою программу.... если нужен исходник то прикрепляю |