DLL, program svarer ikke

Tags:    delphi

Hej. Jeg har et problem med et program hvor jeg bruger en dll-fil. Dll-filen downloader en fil på f.eks. et par mb og under hele processen holder mit "hovedprogram" op med at svare, dvs. jeg ikke kan lukke/maksimere/minimere det eller flytte rundt på det eller noget som hest. Er der nogen der har en ide til hvad jeg kan gøre for at undgå dette?



7 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Den ville jeg lave i en tråd for sig selv.

Du giver kontrollen til koden i dll'et, og taber derved selv muligheden for at gøre noget, mens den kører.

Du kan ikke lave en Application.ProcessMessages() i dll'et, så den vil hænge, med mindre du lader den køre for sig selv.

/friis



:)



Hey Jonas,
som Thorkild skriver skal du gøre brug af "Multithreading". Der findes en række artikler om dette emne, den bedste jeg har fundet til dato må nok være
"Multithreading - The Delphi Way"
http://www.eonclash.com/Tutorials/Multithreading/MartinHarvey1.1/ToC.html

udover den har vores allesammens delphi.about.com en række artikler som du kan finde her:
http://delphi.about.com/od/kbthread/

skulle det ikke være tilstrækkeligt, er Google din ven :)



Havde lige præcis prøvet det med processmessages og regnede ud at jeg nok skulle finde noget om multithreading. Men umiddelbart så det lidt besværligt ud så jeg spurgte her ;). Men kigger lige på de 2 links.



Det nemmeste vil nok være at bruge en TThread og så putte alt det, du vel have lavet ind i den override'de Execute-metode.

Altså noget i stil med

MyThread = class(TThread)
protected
procedure Execute();override;.......







Så noget i retningen af

Fold kodeboks ind/udKode 



Edit: Ok nu gør threaden det den skal...men programmet svarer stadig ikke. Her er koden

Fold kodeboks ind/udKode 


Har det noget at gøre med jeg siger Form1.Download?



Edit 2:
Ok nu er den ved at være der. Skulle bare rykke alle mine objekter ind i TMyThread.Execute og for at oprette tråden fyrer jeg en
begin
TMyThread.Create(false)
end;
af. Så virker det sgu ;).



Indlæg senest redigeret d. 18.10.2006 12:31 af Bruger #3275
:):)



Indlæg senest redigeret d. 22.03.2007 19:35 af Bruger #3275
t