2013-03-15 103 views
0

我有一個簡單的VCL表單與TAnimate組件設置爲使用aviCopyFiles。該表格包含ShellAnimations單元,因此它可以在Windows 7上運行。如何得到TAnimate重繪沒有ProcessMessages

在窗體激活時,它使TAnimate處於活動狀態,然後開始使用LZCopy作爲更新過程的一部分複製文件。

我發現雖然是TAnimate圖像只有當我調用Application.ProcessMessages,即使它應該是在它自己的線程(Timers屬性爲false)時纔會改變。

如何在循環中使其平滑動畫以複製更新的文件?

回答

3

改變主意!

該應用程序的主線程旨在維護用戶界面並響應操作系統,例如,爲消息隊列提供服務並對收到的消息作出適當的響應。

想想那樣,你會意識到你不需要一個TAnimate在你的主線程忙的時候工作。你需要的是通過將繁重的工作轉移到不同的線程來獲得響應主線程。

在你的情況,將您循環,更新的文件複製到不同的線程,你會得到TAnimate 主線程平滑的動態所有的時間。

+0

在進行此複製過程時,主線程沒有其他任何操作。用戶不能也不應該對應用程序做其他任何事情。窗體顯示爲模態。爲什麼要通過線程的所有麻煩,只是爲了讓一個愚蠢的TAnimate工作,當文檔具體說「當定時器是假的,動畫是在一個單獨的線程中播放。」。這意味着即使主線程忙於循環,動畫仍然應該發生。不是這種情況。 – SiBrit 2013-06-05 02:25:48

+0

當然,這對主線程來說是另一回事,並且是爲了保持應用程序對主機操作系統和UI的響應能力。也許你不喜歡它,但窗口編程應該完成的方式。 – jachguate 2013-06-10 23:55:24

+0

只要在這裏發表評論來說是的,我應該讓主線程啓動一個新線程來執行復制過程,而主線程只刷新圖形並處理OS消息。不幸的是,我被困時間,需要一個簡單的解決方案,主線程完成了複製過程,只需要一個視覺線索來取得進展。 – SiBrit 2016-09-19 04:00:15