none
如何解决在os加在程序锁内执行托管代码时出现的问题 RRS feed

  • 问题

  • 我引入了两个dll文件 using Vlc.DotNet.Forms; using Vlc.DotNet.Core; 声明 VlcControl ctrl = new Vlc.DotNet.Forms.VlcControl(); Vlc.DotNet.Core.FileMedia media = null; 当执行ctrl.play(media)时出现异常: 正试图在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。 此问题该如何解决
    2011年1月6日 11:40

答案

全部回复

  • dear
    这各控件看来不是MS的控件,你得看看那家厂商的范例,或是询问那家厂商
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年1月7日 4:58
  • 您好

    請參考 VideoLan DotNet for WinForm & WPF

    http://vlcdotnet.codeplex.com/releases

    使用時的必要條件有達到嗎?

    To start a project with Vlc.DotNet, download & install VideoLan Client. You need to add the files (libvlc.dll, libvlccore.dll) in the output compilation directory and to set the "PluginsPath" property of the VlcManager. You can also put libraries and plugins directory in your assembly directory.


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年1月7日 5:51
  • 看样子是那两个 DLL 在加载过程中执行 DllMain 的时候发生了异常。每个非托管 DLL 都默认有一个 DllMain 函数,当该 DLL 通过 LoadLibrary 加载时,此函数会执行,但此 DllMain 函数中不能执行托管代码。请先试图把 ctrl 加入到当前 Form 的 ControlCollection 然后再尝试其 Play 方法。比如 myForm.Controls.Add(ctrl); ctrl.Play(...);


    Mark Zhou
    2011年1月7日 8:59
  • 你说的条件我都有实现
    2011年1月10日 11:03
  • 在play()之前我已经this.panel1.controls.add(ctrl);

    • 已标记为答案 姜宽 2011年1月10日 11:06
    • 取消答案标记 姜宽 2011年1月10日 11:06
    2011年1月10日 11:04
  • 问题已经解决,使用异线程控制ctrl.play(media)就不会出问题
    2011年1月10日 11:10
  • 你说用异线程控制,请问怎么实现的啊?

    还望指教。

    2011年9月21日 11:14