Всё - это конечно интересно, но я не уверен подпадают ли под ВСЁ удалённые сообщения. Мне нужно точно знать. Не хотелось бы гадать. Ответьте, пожалуйста, а я отмечу ваш ответ решением, так как он отвечает на вопрос, но оставляет неуверенность, что всё-таки во ВСЁ входят и удалённые сообщения.
Сергей, это ты меня хочешь спровоцировать? Я про то, что "делаешь хреново".
Плитка отклеилась - это полностью нерабочий заказ. Это бредовое сравнение. В программировании такого не бывает, что алгоритм работал, получал данные, потом с теми же данными вдруг перестал работать, если написан более-менее адекватно, если на работу алгоритма не влияют какие-то другие внешние факторы, кроме входных данных.
Сергей, не нужно сравнивать бизнес, где всё поставлено на поток, где работает много людей и просьбу сделать сайт по знакомству, но с договором, так как сайт для фирмы. При том нужно ещё договор грамотно составить. Договор я бы не назвал детальным и очень продуманным. Там слова можно интерпретировать по разному.
puk999, версия 3.5 - это древняя Греция, лучше не лезть туда. Всё сильно ушло вперёд. Нужно использовать самую свежую версию и как уже писали с помощью инсталлятора устанавливать. В Window 10, насколько помню, если нет версии фреймворка, то при запуске винда предлагает сама её скачать.
Денис Загаевский, ну как минимум, то что интересуется - это уже хорошо. Возможно, сейчас спрашивает, а потом будет и исходники смотреть, нельзя ничего утверждать на 100%. С чего-то нужно же начинать. Но я вас услышал.
Денис Бредун, в принципе, хорошее стремление понять, что как работает. Всяко лучше, чем посмотреть видеоуроки и лепить шлак. Такие люди обычно и становятся очень хорошими специалистами, которые копают и им реально интересно.
Для начала нужно показать свой код, показать где "плохой" вариант и почему вот хочется его исправить на "хороший". Если я всё правильно понял, может быть просто понижать счётчик на 1, если условие не выполнено? В чём вообще задача заключается? Потому что может быть так, что вы пытаетесь решить задачу не тем способом.
Денис Бредун, ну судя по тому, что написано в документации Microsoft:
Метод Main — это точка входа для выполняемой программы. Это начальный и завершающий этапы управления программой.
Main объявляется внутри класса или структуры. Метод Main должен быть статическим. Он может не быть открытым. Класс или структура, в которой он объявлен, не обязаны быть статическими.
Метод Main может иметь значение void, int или (начиная с C# 7.1) Task, а также тип возвращаемого значения Task{int}.
Если только Main возвращает Task или Task{int}, объявление Main может включать модификатор async. Обратите внимание, что это, в частности, исключает метод async void Main.
Метод Main может быть объявлен с параметром string[], который содержит аргументы командной строки, или без него. Когда вы используете Visual Studio для создания Windows-приложений, вы можете добавить параметр вручную либо воспользоваться методом GetCommandLineArgs(), чтобы получить аргументы командной строки. Параметры считываются как аргументы командной строки, индексы которых начинаются с нуля. В отличие от C и C++, имя программы не рассматривается как первый аргумент командной строки в массиве args, но является первым элементом метода GetCommandLineArgs().
Денис Бредун, то есть компилятор нашёл метод, пометил его, а CLR уже ищет эту пометку и запускает, но это всегда будет именно Main. Это я так, дополнил, я увидел, что ты написал, что понял.
Денис Бредун, но вызывает метод Main не компилятор, а CLR - это разные вещи. Компилятор всегда ищет в сборке метод именно с именем Main и другими совпадениями из сигнатуры метода (static void/int/Task/Task{int} Main(...)). Значит вопрос неправильно сформулирован.
Денис Бредун, ну и что это доказывает или как противоречит тому, что написал я? Компилятор помечает метод Main аттрибутом, судя по всему, но помечает он именно его. Причём здесь то, как CLR запускает приложение? Вопрос же был в другом.
AlexCruel, да. Либо вот здесь можно посмотреть как я сделал работу с перенаправлением в UI поток. Нужно смотреть класс Analyzer и как используется SynchronizationContext.
То есть, вообще всю работу с SerialPort можно обернуть вот в такой отдельный класс, который будет генерировать события, а именно получив данные с порта будет получать строку (не парсить её, а целую строку) и её уже в виде события, перенаправленного в UI поток генерировать. По сути всё так же как в Analyzer, только внутри будет SerialPort.
Это если заморачиваться. А можно просто в обработчике события пробрасывать распарсенные данные черех вызов метода Invoke.