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

Поиск:

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


Бывалый
*


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

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



Доброго времени суток!

возникла такая проблема!
есть метод
Код

  public  static  string FindFirst(SerialPort port, string first)
        {

            try
            {
gt:;
                string temp = "";
                initPort(port);
                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
                {
                    goto gt;
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(Convert.ToString(ex));
            }
            return first;
}

как сделать чтоб когда его вызываю то он начинал работать в отдельном потоке? Если кто знает подскажите пожалуйста!

Это сообщение отредактировал(а) golfV - 3.2.2010, 15:35
PM MAIL   Вверх
mrbrooks
Дата 3.2.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(golfV @  3.2.2010,  15:34 Найти цитируемый пост)
Если кто знает подскажите пожалуйста!

используйте либо класс Thread, либо BackgroundWorker (если приложение с ГУЕМ - рекомендую его). Воспользуйтесь поиском по форуму - решения уже были.  smile 
PM MAIL   Вверх
uranpro
Дата 3.2.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



можно так
Код

Thread thr = new Thread(gelegat() {
gt:;
string temp = "";
                initPort(port);
                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
goto gt;
});
thr.IsBackground = true;
thr.Start();

или сделать так
Код

 public  static  string FindFirst(object state)
{
try
{
var o = (MyObject)state;
var port = o.port;
var first = o.first;

gt:;
                string temp = "";
                initPort(port);
                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(1000);
                    goto gt;
                }

}
catch {}
}



--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Ronin08
Дата 3.2.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

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



Код

using System;
using System.Threading;

public class Test
{
    static void Main()
    {
        ThreadStart job = new ThreadStart(FindFirst);
        Thread thread = new Thread(job);
        thread.Start();
        
       
    }

    public  static  string FindFirst(SerialPort port, string first)
        {
         ...........
        }
    
}


--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
uranpro
Дата 3.2.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вызов
Код

var thr = new Thread(FindFirst);
thr.IsBackground = true;
thr.Start(state);



--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
golfV
Дата 3.2.2010, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



uranpro попробовал сделать как ты сказал, что то неполучается, компилятро ругается.
Код

  public static string findf(SerialPort port, string first)
        {

            Thread thr = new Thread(delegate() {
           gt:;
                string temp = "";
                initPort(port);
                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
                goto gt;
                });
                thr.IsBackground = true;
                thr.Start();
 
        }

с потоками первый раз сталкнулся, может я что то нетак делаю?

Добавлено @ 16:13
вроде все заработало! большое всем спасибо за помощь

Это сообщение отредактировал(а) golfV - 3.2.2010, 16:31
PM MAIL   Вверх
golfV
Дата 3.2.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



у меня еще такой вопрос появился может кто с этим сталкивался
метод теперь выглядит таким образом
Код

 public static string FindFirst(SerialPort port, string first)
        {

            Thread thr = new Thread(delegate()
            {
           gt:;
                string temp = "";
                initPort(port);
                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
                {
                    goto gt;
                }
                });
                return first;
                thr.IsBackground = true;
                thr.Start();
               

            
        }

только он теперь невозвращает переменую first вернее возвращает но она ничего несодержит. Если кто знает подскажите как с этим справится
PM MAIL   Вверх
golfV
Дата 3.2.2010, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



вопрос решен, поставил 
Код

thr.Join();

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

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


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

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


 




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


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

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