我使用了这个教程http://delphi.about.com/od/kbthread/a/thread-gui.htm创建了一个类,它在另一个线程中使用
但是我遇到了一个问题,即使我在另一个线程中进行了下载(继承自TThread并在Execute方法中完成工作),GUI线程似乎也被阻塞了,并且在下载完成之前不处理消息。这是我的类的代码:http://codepad.org/nArfOPJK(只有99行,是一个简单的类)。我通过在按钮点击事件处理程序中执行以下操作来执行它:
注意:SetApp方法是为了在我的类TDownloadThread的UpdateDownloadProgress方法中手动调用app.ProcessMessages而设计的。这将防止GUI无响应,但会使进度条表现奇怪(aero进度条的移动发光物件移动得太快),因此我将其删除。我想要正确地解决这个问题,如果必须调用ProcessMessages,那么多线程也没有意义。有人能帮我解决这个问题吗?谢谢。
TDownLoadURL
异步下载互联网上的文件。我这样做是因为我想要下载一个文件而不会阻塞UI线程,这样程序在下载大文件时不会变得无响应,进度条可以更新等等。但是我遇到了一个问题,即使我在另一个线程中进行了下载(继承自TThread并在Execute方法中完成工作),GUI线程似乎也被阻塞了,并且在下载完成之前不处理消息。这是我的类的代码:http://codepad.org/nArfOPJK(只有99行,是一个简单的类)。我通过在按钮点击事件处理程序中执行以下操作来执行它:
var
frame: TTProgressFrame;
dlt: TDownloadThread;
begin
dlt := TDownloadThread.Create(True);
dlt.SetFile('C:\ohayo.zip');
dlt.SetURL('http://download.thinkbroadband.com/512MB.zip');
dlt.SetFrame(frame);
dlt.SetApp(Application);
dlt.Start;
注意:SetApp方法是为了在我的类TDownloadThread的UpdateDownloadProgress方法中手动调用app.ProcessMessages而设计的。这将防止GUI无响应,但会使进度条表现奇怪(aero进度条的移动发光物件移动得太快),因此我将其删除。我想要正确地解决这个问题,如果必须调用ProcessMessages,那么多线程也没有意义。有人能帮我解决这个问题吗?谢谢。