Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2015, 13:47   #1
aesoem
Форумчанин
 
Регистрация: 24.12.2007
Сообщений: 288
По умолчанию System Error. Code 1400. Недопустимый дескриптор окна

День добрый, ситуация такая...
на форме 1 есть компонент idftp1, нужно залить файл на фтп сервер.
Сделана индикация процесса(в событиях onWorkXXXXXXX компонента идфтп), на форме 2 прогрессбар.
Все прекрасно работает но если загрузка идет больше (примерно 5 секунд) то форма 2 с прогрессом перестает отвечать. После окончания загрузки на фтп сервер все оживает. Мелочь а не красиво. Добавил антифриз на форму 1, ситуация не исправилась. Решил засунуть загрузку в поток.
Все работает отлично, проблема с зависанием исчезла но.... Теперь при закрытии программы получаю
Код:
System Error. Code 1400. Недопустимый дескриптор окна
Код запускаемый в потоке
Код:
procedure TMyThread.Execute;
begin
try
form1.idftp1.Put(form1.filenameTOftp,ExtractFileName(form1.filenameTOftp),true );
except
 addevent('Ошибка загрузки файла на ftp.');
end;

end;
Запускаю поток так:
Код:
procedure TForm1.PutFTPTimer(Sender: TObject);
begin
PutFTP.Enabled:=false;
MyThread:=TMyThread.Create(False);

end;
Данный таймер изачально отключен, включается при успешном коннекте компонента idftp
Я так понял тут синхронизаия нужна? а как ее применить ....

Последний раз редактировалось aesoem; 21.08.2015 в 14:14.
aesoem вне форума Ответить с цитированием
Старый 21.08.2015, 15:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

1) Зачем тут нужен таймер?
2) Да, синхронизация нужна, но в данном случае она не помошник. Нужно idftp1 создавать внутри метода TMyThread.Execute; и там же его освобождать. Что-то типа:
Код:
procedure TMyThread.Execute;
begin 
 with TIdFTP.Create(nil) do begin
  Host:=...;
  ... Тут другие свойства указать типа пароля или еще чего
  try
     Put(form1.filenameTOftp,ExtractFileName(form1.filenameTOftp),true );
   except
    addevent('Ошибка загрузки файла на ftp.');  
   end;
  free;
 end;
end;
Тогда и синхронизировать ничего не понадобится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
System error Code 8 Недостаточно памяти для обработки команды Lamia Общие вопросы Delphi 10 25.08.2014 16:45
Недопустимый дескриптор окна Pearl777 Общие вопросы Delphi 3 03.03.2013 19:57
System error code 5 при вызове AssignProcessToJobObject Effort Общие вопросы Delphi 1 16.07.2011 00:25
EOSError 1400 "Недопустимый дескриптор окна" Crystallon Общие вопросы Delphi 5 21.06.2011 11:41
Ошибка при компиляции:System Error. Code: 2. Waik Общие вопросы Delphi 0 28.05.2011 20:43