Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поток, передача параметра в onTerminated


Alexey ©   (2009-11-11 17:47:00) 

Добрый день!
Столкнулся с такой проблемой-качаю файлы с интернета используя потоки, сначала с определенного URL в список list сохраняются необходимые адреса ссылок, далее в цикле выкачиваю:

  for i:=0 to list.Count-1 do
   begin
    d:=TDownLoader.Create(true);
    d.URL:=list[i];                        // это url что качаю
    d.ToFolder:='C:\';                   // это куда качаю
    d.FreeOnTerminate:=true;
    d.OnTerminate:=thrTerminate; // внимание!
    d.Resume;
   end;


все работает как надо, все отлично.
НО:
Необходимо чтобы по событию onTerminate выводился, например в TMemo, адрес каждого закачанного файла, а вот как передать этот параметр ума не приложу...

Тем более (но это скорее всего моя ошибка, точнее точно моя ошибка) если, например, в обработчике этого события просто написать

ShowMessage('Файл закачан')

то сначала закачаются все файлы, а потом поочереди выскочит ShowMessage. Т.е. не после каждого файла, а после всех

Подскажите как исправить, чтобы все работало как я хочу, если это возможно.

Заранее спасибо!


Alexey   (2009-11-11 21:33:00) [1]


> OnTerminate возникает только один раз, когда уже все файлы
> будут закачаны.


а вот этого я не знал, но все-равно уже все ок, спасибо


Anatoly Podgoretsky   (2009-11-11 21:21:00) [2]

> Alexey  (11.11.2009 17:47:00)  [0]

OnTerminate возникает только один раз, когда уже все файлы будут закачаны.


Anatoly Podgoretsky   (2009-11-11 20:43:00) [3]


> Юрий Зотов ©   (11.11.09 18:27) [4]

Вариант [3] проще, чем передавать в поток и в нем вызывать synchronize


Alexey   (2009-11-11 18:53:00) [4]

Вобщем оба способа работает!!! Отлично!

Спасибо всем ещё раз!


Leonid Troyanovsky   (2009-11-11 18:40:00) [5]


> Юрий Зотов ©   (11.11.09 18:27) [4]

> Проще сделать не через OnTerminate, а так:

А безопасней 1 вариант, бо там метод формы,
и Memo1 ей известно.

--
Regards, LVT.


Alexey   (2009-11-11 18:36:00) [6]

to Юрий Зотов:

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

Блин,здорово!
Спасибо за отличный совет!


Юрий Зотов   (2009-11-11 18:27:00) [7]

> Alexey   (11.11.09 17:47)

Проще сделать не через OnTerminate, а так:

1. При создании потока передаем ему Memo и тот запоминает его в своем поле.

2. В конце метода Execute добавляем запись в этот Memo (но обязательно через Synchronize  - см. в справке).


Юрий Зотов   (2009-11-11 18:14:00) [8]

Memo1.Lines.Add(TDownLoader(Senrder).URL);


Alexey   (2009-11-11 18:03:00) [9]

Прости, не понял...


Dennis I. Komarov   (2009-11-11 17:58:00) [10]

Когда создаешь модуль потока, там чего-то такое написано...


Наверх

Титульная страница Поиск, карта сайта Написать письмо