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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить информацию из потока? 
:(
    Опции темы
HalkaR
Дата 26.1.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

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



Есть приложение, запускающее несколько потоков

Код

DownloadThread dt = new DownloadThread(this.textBox2.Text, this.thread_count);
t[this.thread_count] = new Thread(new ThreadStart(dt.ThreadProc));
t[this.thread_count].Start();
this.thread_count++;

как я могу получить информацию из потоков (например процент выполненой работы)?
Понимаю что нужно использовать события, вот только как?
Спасибо!
PM MAIL   Вверх
arilou
Дата 26.1.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



HalkaR
Можно сделать, определив делегат, который будет вызываться в потоковом методе и передавать процент выполненой работы. Примерно так:

Код

public delegate void ProgressCallback(int percentComplete);

public class MyWorkerClass
{
  ProgressCallback callback = null;
  Thread t = null;

  public MyWorkerClass(ProgressCallback progress)
  {
    callback = progress;

    Thread t = new Thread(new ThreadStart(threadMethod));
  }

  public void Start()
  {
    t.Start();
  }

  void threadMethod()
  {
    // do something
    callback(10);

    // do something else
    callback(20);

    // .....
  }
}

public class App
{
  static void ReportProgress(int progress)
  {
    Console.WriteLine(progress.ToString() | " % complete");
  }

  static void Main()
  {
    MyWorkerClass w = new MyWorkerClass(new ProgressCallback(ReportProgress));
    w.Start();

    // ... do something else while w is working
  }
}


Код написан прямо тут, поэтому могут быть опечатки или неточности. Но смысл примерно такой.

Это сообщение отредактировал(а) arilou - 26.1.2006, 16:17


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 26.1.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Можно сделать через глобальную переменную (aka переменная класса, доступная сразу потоку и вызывающему методу) и синхронизирующее событие.


--------------------
user posted image
PM MAIL WWW   Вверх
HalkaR
Дата 27.1.2006, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

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



arilou, все ок, но есть одна проблема. Как из метода ReportProgress изменить значение в классе App. Компилятор не дает.
PM MAIL   Вверх
arilou
Дата 27.1.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



HalkaR
Либо член класса должен быть public static, либо надо в ReportProgress передавать ссылку на экземпляр класса, и тогда изменяемый член должен быть public.


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

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


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

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


 




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


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

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