我在VB.net应用程序框架v3.5中使用TwainPro4.dll进行扫描。
当我运行我的应用程序时,我得到以下异常,请告知
检测到LoaderLock 消息:DLL'C:\ WINDOWS \ assembly \ GAC \ PegasusImaging.WinForms.TwainPro4 \ 4.0.22.0__80d669b8b606a2da \ PegasusImaging.WinForms.TwainPro4.dll'正在尝试OS Loader锁内的托管执行。不要尝试在DllMain或图像初始化函数中运行托管代码,因为这样做会导致应用程序挂起。
答案 0 :(得分:2)
我假设您的意思是在调试应用程序时收到此消息。此消息非常重要。来自MSDN:
“loaderLock托管调试助手(MDA)检测到在保存Microsoft Windows操作系统加载程序锁定的线程上执行托管代码的尝试。任何此类执行都是非法的,因为它可能导致死锁并在使用之前使用DLL已由操作系统的加载程序初始化。“
现在,要使应用程序在调试模式下运行,您可以通过按下(Ctrl + D,E)然后打开托管调试助手树并取消选中Loader Lock来禁用Debug Exceptions界面中的LoaderLock MDA。
然而!这表示DLL被初始化或写入不正确。因此,再次来自MSDN:
通常,进程内的多个线程将死锁。其中一个线程可能是负责执行垃圾收集的线程,因此这种死锁会对整个过程产生重大影响。此外,它将阻止任何需要操作系统的加载程序锁定的其他操作,如加载和卸载程序集或DLL以及启动或停止线程。
在某些特殊情况下,在强制初始化之前调用的DLL中,也可能触发访问冲突或类似问题。
您可能需要返回DLL的开发人员,看看他们批准的解决方案是什么。
来源