2010-11-10 43 views
1

我在我的VB.net應用程序框架v3.5中使用TwainPro4.dll進行掃描。檢測到加載程序鎖twain

當我運行我的應用程序,我得到下面的異常,請告知檢測

LoaderLock 消息:DLL「C:\ WINDOWS \裝配\ GAC \ PegasusImaging.WinForms.TwainPro4 \ 4.0.22.0__80d669b8b606a2da \ PegasusImaging .WinForms.TwainPro4.dll'正在嘗試OS Loader鎖內的託管執行。不要試圖在DllMain或圖像初始化函數中運行託管代碼,因爲這樣做會導致應用程序掛起。

+0

你得到這個錯誤,而調試或同時運行的應用程序?調試意味着你必須改變Visual Studio處理Loaderlock的方式。 – PradeepGB 2010-11-10 12:38:36

回答

2

我假設你的意思是當你調試你的應用程序時,你會得到這個消息。這個信息很重要。從MSDN:

「的loaderLock託管調試助手(MDA)檢測嘗試對擁有微軟Windows操作系統加載器鎖的線程執行託管代碼的任何這樣的執行是非法的,因爲它可能導致死鎖和。使用的DLL之前就已經通過操作系統的加載器初始化。「

現在,按(CTRL + d,E,讓你可以在調試異常接口禁用LoaderLock MDA在調試模式下運行應用程序),然後打開Managed Debugging Assistants樹並取消選中Loader Lock。

但是!這表示DLL被初始化或寫入不正確。因此,再次從MSDN,:

通常,進程內的幾個線程將死鎖。其中一個線程可能是負責執行垃圾回收的線程,因此這種死鎖可能會對整個過程產生重大影響。此外,它還可以防止任何需要操作系統加載程序鎖定的額外操作,例如加載和卸載程序集或DLL以及啓動或停止線程。

在一些不常見的情況下,它是也可能觸發訪問衝突或類似問題,在被初始化之前調用的DLL中觸發

您可能想回到DLL的開發人員,看看他們批准的解決方案是什麼。

來源