![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
WantToProg |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 13.4.2009 Репутация: нет Всего: нет |
Дело в том, что моя тема не просит ответить на вопрос, как сделать, чтоб работало. Все как ни странно работает.
Основная проблема, это то, что я не знаю как правильно подойти к написанию программы. Где что определить, как к чему обращаться. Я прошу взглянуть на код написаный мной (не без помощи вас ![]() Итак, код:
Код требует серьезной доработки, как по работе с многопоточностью, так и обработкой выхода из потока(тоже кстати не знаю как сделать). Но основная проблема, как мне кажется, это некрасиво и не аккуратно написаный код. Я прошу посмотреть, и по возможности указать где, что и как нужно сделать. PS: Прошу прощения если разместил не там где нужно. Перенесите если не сложно в "Общие вопросы по .NET и C#" Это сообщение отредактировал(а) WantToProg - 1.12.2009, 14:01 |
|||
|
||||
LamerTM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Если тебя интересует оформление кода, то это сюда:
"Соглашения по оформлению кода команды RSDN" http://www.rsdn.ru/article/mag/200401/codestyle.XML |
|||
|
||||
Экскалупатор |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
WantToProg, такое ощущение, что это просто структурный код помещенный в оболочку формы и запускающийся по нажатию кнопки, да и даже для структурного он как то жестковат.
static void Server(), я бы лично разделил штук на пять отдельных методов, а лучше в отдельном статическом классе реализовал. отдельные строки для меня вообще остаются загадкой:
зачем делать массив размером 1? если dtr это строка, и у тебя всегда один байт, может можно как то проще это сделать?
это вообще не айс. делает код еще больше запутанным. мало того что у тебя трех этажные циклы вложенные в друг друга, так еще и это. да и вообще просмотри хорошо свой код. например: для чего такое условие цикла?
Добавлено через 4 минуты и 6 секунд в общем в ответ на твой вопрос "как правильно писать программу" - это надо так сделать что бы человек(не комп, ему все равно, он поймет в любом случае, он же ее выполняет) мог прочитать твою программу и понять что в ней происходит. |
||||||
|
|||||||
WantToProg |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 13.4.2009 Репутация: нет Всего: нет |
Оно конечно хорошо, но немного не это меня интересовало. В основном проблема касается понятности кода
Вот от этого хотелось бы избавится, понять как правильно делать
Вот тут самая проблема, что не ясно как это сделать. Я уже не первую программу пишу и основная моя проблема, не могу найти ошибку, в том, что написал. Если не сложно, покажите как оно делается правильно, на примере этой программы. PS: Краткое описание программы: Запускаем TCP сервер и ждем подключения. Когда клиент подключается, запускаем цикл проверки входящих сообщений, плюс пингуем, на наличие клиента в сети. Если клиент отпал(сети нет, кабель перегрызли), то переходим в режим прослушивания, и ждем подключения следующего клиента. В принципе все просто и работает. Но программа написана исключительно криво, а как написать ее правильно, я не знаю :( |
||||||
|
|||||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
по организации кода можно почитать:
Макконел "Совершенный код" Мартин Фаулер "Рефакторинг" |
|||
|
||||
sergioK |
|
|||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 15.2.2008 Репутация: нет Всего: нет |
[QUOTE=WantToProg,2.12.2009, 14:50][QUOTE=LamerTM, Но программа написана исключительно криво, а как написать ее правильно, я не знаю :([/QUOTE]
Когда то лет 10 назад один человек мне сказал - размер отдельной взятой функции не должен превышать размер экрана в котором она пишеться , начни с этого , ну и про goTo забудь, а вобще то этим вещам годами учаться |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
поддерживаю -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
kobra |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
вот тут есть две пути. 1. пишем так, как в вышеописанном коде, потом выносим в отделние модули то, что нужно вынести. 2. сначало продумываем все методы, пишем, а потом в основном методе их визываем. goto не самый лущи вариант выити из цикла, тем более что после этого опять заходит в тотже цикл. да и while (true) я бы заменил на рекурсию. |
|||
|
||||
WolfTheGrey |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 21.1.2009 Где: forum.vingrad.ru Репутация: нет Всего: 2 |
1-старайся обьявлять переменные в начале класса.
2- нравится goto metka; - пользуйся. Тока в твоем коде я думаю что она слишком ранно стоит. при каждом переходе на метку вновь и вновь будет вызываться "listener.Start();" - зачем, ты же сервер? я бы метод пинга реализовал в новом потоке (чтоб не отвлекал). И смысл пинговать, когда при разъединении TCP вызывается на сервере ошибка Exeption, обработай его: закрой соедиение, удали пользователя... Добавлено через 12 минут и 51 секунду При UDP соединении можно пинговаьть, так как ни клиент о сервере и сервер о клиенте ни чего не знают. |
|||
|
||||
CasperSC |
|
||||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 203 Регистрация: 27.11.2009 Репутация: нет Всего: 1 |
Почитал тут и подумал: "Интересная темка"! Меня тоже этот вопрос интересует. Пишу программу и паралельно учу язык, так в ходе написания, я узнаю например, что для хранения настроек программы не обязательно использовать промежуточную структуру, хотя местами без этого ну ни как, например для отмены внесённых изменений в форме настроек, на забинденых контролах.
Есть такой код и почему-то мне кажется тоже кривой до безобразия, щелчок по pictureBox играющему роль анимированой кнопки: Суть: при нажатии на кнопке или иконке в трее, если в настройка выбрано "Использовать анимированные показ и скрытие главного окна", то форма "уезжает" за панель задач. Иначе просто скрывается.
щелчок по значку в трее:
Прокоментируйте пожалуйста свои мысли. Мне кажется прячу и востанавливаю форму криво, что кривее некуда, может есть способ лучше? Особенно System.Threading.Thread.Sleep(10); и вообще весь цикл. Помоиму этот System.Threading.Thread.Sleep(10); тормозит всю программу. |
||||||||
|
|||||||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
зачем два раза проверять одно и тоже? иф не нужен совсем. |
|||
|
||||
CasperSC |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 203 Регистрация: 27.11.2009 Репутация: нет Всего: 1 |
Хм... даже не замечал этого. А то что криво написано я имел ввиду сам цикл и всё, что в нём. Может и не криво, просто других способов не видел. Через таймер было бы без System.Threading.Thread.Sleep(10); но не удобно. |
||||
|
|||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
CasperSC, мне кажется лучше сделать один метод для скрытия(т.е. один для скрытия и один для раскрытия) формы. и что бы уже в методе решалось как именно прятать/открывать форму. т.е. что бы не в обработчике выбирался вариант скрытия, а именно сам метод решал. это уменьшило бы количество ифоф.
Это сообщение отредактировал(а) Экскалупатор - 20.1.2010, 11:29 |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
||||
|
||||
WolfTheGrey |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 21.1.2009 Где: forum.vingrad.ru Репутация: нет Всего: 2 |
System.Threading.Thread.Sleep(10)
замени его на: System.Windows.Threading.DispatcharTimer он по лучше с формой себя ведет. Thread.sleep() он поток замораживает (форму) а DispatcharTimer тайминг отсчитывает. И почему не хочеш воспользоваться классами там всякими: AnimationDuration Добавлено через 1 минуту и 37 секунд А вобще мне понравился твой код, не заграмажденный. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |