Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отрисовка формы 
V
    Опции темы
golfV
Дата 5.2.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 4.11.2007

Репутация: 1
Всего: 1



а мне кажется что нет ). Первому методу я передаю имя порта и пустую переменную, которую он мне вернёт после 
прохождения метода.
Код
 
FindFirst(myPort,s1);

и второму методу я также передую пустyю переменую s2 которую он мне вернет с результатом и переменую s1 с результатом 
первого метода чтоб с ней во втором методе сравнивать. 
Код

FindSecond(myPort, s2, s1);

Наверное я что то непонял)

Добавлено через 1 минуту и 22 секунды
в любом случае огромное спасибо за такие подробные примеры и советы.
PM MAIL   Вверх
KelTron
Дата 5.2.2010, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Сравним 2 метода:
Код

private string SomeFunc(string str)
{
    str = "123";
    return str;
}

private string SomeFunc()
{
    string str = "123";
    return str;
}

В чём недостатки первого:
1. Лишний бесполезный параметр.
2. Параметр используется как локальная переменная, что является признаком дурнопахнущего кода. Каждая переменная должна использоваться для одной цели, также и с параметрами - они нужны для получения информации, т.е. для чтения, если они явно не указаны как ref или out.

Несколько советов как нужно изменить метод FindFirst и по аналогии FindSecond
1. Нужно избавиться от кода с потоками(мы и так уже используем BackgroundWorker)
Код

public string FindFirst(SerialPort port, string first)
{
    if (port.IsOpen != true)
    {
        initPort(port);
    }

    gt:;
    string temp = "";
    byte[] toSend1 = new byte[] { 0x1B, 0x50, 0x0D, 0x0A };
    PortWrite(port, toSend1);
    temp = port.ReadLine();
    temp = parse(temp);
    if (Convert.ToDouble(temp) > 2.0)
    {
        first = temp;
    }
    else
    {
        Thread.Sleep(2000);
        goto gt;
    }

    return first;
}

2. Убираем ненужный параметр
Код

public string FindFirst(SerialPort port)
{
    if (port.IsOpen != true)
    {
        initPort(port);
    }

    gt:;
    string temp = "";
    byte[] toSend1 = new byte[] { 0x1B, 0x50, 0x0D, 0x0A };
    PortWrite(port, toSend1);
    temp = port.ReadLine();
    temp = parse(temp);
    if (Convert.ToDouble(temp) > 2.0)
    {
        return temp; //<---
    }
    else
    {
        Thread.Sleep(2000);
        goto gt;
    }
}

3. goto здесь не нужен, без него код понятнее
Код

public string FindFirst(SerialPort port)
{
    if (port.IsOpen != true)
    {
        initPort(port);
    }

    while (true)
    {
        string temp = "";
        byte[] toSend1 = new byte[] { 0x1B, 0x50, 0x0D, 0x0A };
        PortWrite(port, toSend1);
        temp = port.ReadLine();
        temp = parse(temp);
        if (Convert.ToDouble(temp) > 2.0)
        {
            return temp;
        }
        Thread.Sleep(2000);
    }
}







--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
golfV
Дата 6.2.2010, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 4.11.2007

Репутация: 1
Всего: 1



KelTron огромное спасибо за помощь сам бы несправился, сделал по твоему примеру с BackgroundWorker. Методы тоже поправил по твоему совету. Все работает отлично! еще раз спасибо!!!

Это сообщение отредактировал(а) golfV - 6.2.2010, 02:01
PM MAIL   Вверх
uranpro
Дата 6.2.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: 1
Всего: 1



добавлю немного=)
для работы с контролами, созданными в других потоках следует использовать
Код

if (Control.InvokeRequired)
  Control.Invoke(new methodDelegat(method), methodArgs)

работа с потоками: Клац =)


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.