Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];

Вниз

Недопустимый дескриптор окна   Найти похожие ветки 

 
Alex_C   (2007-10-22 10:48) [0]

Возникает следующая проблема: полачаю данные из инета в отдельном треде. При получении данных делаю следующее:

// Процедура вызываемая при получении очередной порции данных
// для изменения кол-ва скачанных данных
procedure DLProc( RcvByte: Integer );
begin
   MainForm.WaitPanel.Caption := "Download: " + IntToStr(RcvByte) + " bytes";
   MainForm.WaitPanel.Refresh;
end;

// Собственно сама нить:

procedure TGetThread.Execute;
begin
   FreeOnTerminate := True;
   try
       EnterCriticalSection( CS );

       MainForm.DownloadButton.Enabled := False;

       GetsData := TStringList.Create;

       MainForm.WaitPanel.Visible := True;
       MainForm.WaitPanel.Refresh;

       GetsData.Text := HTTPGet( GetStr, "GET", "", DLProc );

       GetsData.SaveToFile("C:\ReceiveData.txt" );
   finally
       MainForm.WaitPanel.Visible := False;
       GetsData.Free;
       MainForm.DownloadButton.Enabled := True;
       LeaveCriticalSection( CS );
   end;
end;

Так вот, при выходе из проги, если б хотя бы раз вызывалась эта нить, возникает ошибка:
Exception EOSError:
System Error: Code 1400
Недопустимый дескриптор окна.

Если нить не запускать, прога естественно нормально завершается. Все качает и отображаетка как надо.
Вопрос: почему так происходит?


 
Сергей М. ©   (2007-10-22 10:50) [1]


> почему так происходит?


Потому что обращение к визуальным VCL-контрола в доп.потоке недопустимо.


 
Alex_C   (2007-10-22 10:54) [2]

Да все понял. Всему виной строки
MainForm.WaitPanel.Visible := True;
и
MainForm.WaitPanel.Visible := False;
А как же мне сделать, чтоб верно было?


 
Сергей М. ©   (2007-10-22 10:58) [3]


> Alex_C   (22.10.07 10:54) [2]


воспользоваться методом TThread.Synchronize()


 
Рамиль ©   (2007-10-22 10:58) [4]


> Alex_C   (22.10.07 10:54) [2]

А комментарии при создании модуля потока смотрели? Там не просто так написано..


 
Alex_C   (2007-10-22 11:03) [5]

Ок! Все разобрался! Всем спасибо!


 
Alex_C   (2007-10-22 11:18) [6]

Теперь появилась следующия проблема:
если окно программы не трогать - все работает без проблем, а вот если попытаться его передвигать - то само окно не перерисовавыется, счетчик скачанных байт перестает изменяться и программа зависает.
Как вот такое поведение программы побороть?


 
Сергей М. ©   (2007-10-22 11:22) [7]


> программа зависает


Что сие значит ?


 
Alex_C   (2007-10-22 15:39) [8]

В общем я не правильно выразился :)
Если форму окна не трогать - все работает и циферки скачанный байт бегут. Если переместить  форму по экрану, то она перестает перерисовываться - т.е. циферки застывают в том положении, в котором я начал перемещать форму и по краям пормы появляется белое поле, хотя скачивание происходит и дальше и затем, когда все скачивается (завершается работа нити), форма становится нормального вида.


 
Сергей М. ©   (2007-10-22 15:52) [9]

Показывай код



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.046 c
2-1193174372
smartleds
2007-10-24 01:19
2007.11.18
Господа подскажите плз , не пойму в чем ошибка


2-1193114182
AleKo
2007-10-23 08:36
2007.11.18
Перечисляемый тип.


2-1193686793
VDnn
2007-10-29 22:39
2007.11.18
TExcelApplication


2-1193236815
Alex_C
2007-10-24 18:40
2007.11.18
Снять аттрибут занятости файла в NTFS


15-1192360079
Актер
2007-10-14 15:07
2007.11.18
Спектакль





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский