2011-12-07 40 views
1

在我的應用程序中,只有特定的操作需要某些dll,而這些操作在99.9%的使用操作中不會發生。因此,爲了節省加載時間和內存,這些會根據需要使用LoadLibrary加載動態加載。加載DLL阻塞用戶界面線程

爲了讓用戶瞭解並且程序響應這些庫,它們將被加載到一個sperate線程中,然後在UI線程可用並且該進程可以繼續時通知它。

但是,在我的實驗中,雖然LoadLibrary正在運行,但UI線程被鎖定,事件隊列仍未被處理,從而使該應用程序鎖定並且屏幕不再被重新繪製。

關於LoadLibrary的MSDN沒有提到這種行爲是否有可能在事件隊列仍在處理中的同時在一個線程中加載dll?

+2

當它停止抽水的消息什麼是UI線程做執行? (也就是說,如果你連接調試器並在不抽水的時候破壞它,它叫什麼) –

+0

好主意忘記了,我會檢查 – JProgrammer

+0

這是不必要的自我懲罰。使用鏈接器的/ DELAYLOAD選項。 –

回答

1

當異步加載dll時,它與Visual Studio Debugger在符號服務器中查找新加載的dll的符號有關。

當符號服務器被禁用或沒有調試運行的應用程序有沒有鎖定呈現LoadLibrary

Debugging Symbols