J'essaie d'écrire une application qui prend le son du périphérique d'enregistrement audio par défaut sur un ordinateur. Lors de l'exécution de tout code qui accède à DirectX à partir de mon code managé je reçois cette erreur:LoaderLock a été détecté, et la désactivation de l'avertissement n'aide pas
DLL 'C:\Windows\assembly\GAC\Microsoft.DirectX.DirectSound\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.DirectSound.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.
DevicesCollection coll = new DevicesCollection();
et
Device d = new Device(DSoundHelper.DefaultCaptureDevice);
et
Capture c = new Capture(DSoundHelper.DefaultCaptureDevice);
provoquent tous les LoaderLock MDA pour faire apparaître et dites-moi qu'il y a un problème. J'ai récuré l'Internet (stackoverflow inclus) pour des solutions à ce problème, mais la plupart des gens disent juste pour désactiver l'avertissement, qui ne fonctionne pas. Lorsque je désactive l'avertissement, une exception générique ApplicationException est lancée, ce qui est encore moins utile. J'ai vu les réponses à this question, ce qui n'a pas aidé car il a dit de supprimer le code qui cause l'erreur. D'autres ont dit "réparer votre code".
Mes questions sont les suivantes:
comment puis-je appeler tout (de préférence géré) code DirectX à partir de C# sans obtenir cette erreur?
edit: c'est la trace de la pile je reçois:
at Microsoft.DirectX.DirectSound.Device..ctor(Guid guidDev)
at Autotuner.fMain.button1_Click(Object sender, EventArgs e) in C:\\Users\\Scott\\Documents\\Visual Studio 2008\\Projects\\Autotuner\\Autotuner\\Form1.cs:line 17
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Autotuner.Program.Main() in C:\\Users\\Scott\\Documents\\Visual Studio 2008\\Projects\\Autotuner\\Autotuner\\Program.cs:line 18
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Quelle exception est levée? – SLaks
Une exception est bonne, postez le StackTrace. –
est littéralement appelé ApplicationException avec le message "Erreur dans l'application" –