System.ArgumentException 将 AxWMPLib.AxWindowsMediaPlayer 放入表格

System.ArgumentException on putting AxWMPLib.AxWindowsMediaPlayer in Form

我有一个标准 Form,只有一个 AxWMPLib.AxWindowsMediaPlayer,除了自动生成之外没有任何代码。每次应用程序启动时,我都会得到 System.ArgumentException 两次。它说,该对象不提供 IPropertyNotifySink 接口。但是如何实现它,因为我没有包含它的名称空间 (Microsoft.VisualStudio.OLE.Interop)?我在实现的功能(OnChanged(Int32)OnRequestEdit(Int32))中必须做什么?

这是正常的事故。一个行为良好的 ActiveX 对象应该实现 IPropertyNotifySink 接口(一个 unmanaged COM 接口),但并不是必须这样做。 AxHost 包装器 class 只是盲目地假设它有,所以尝试订阅它,但内部 ConnectionContainer 构造函数发现它没有。

不是致命的,因为实现接口是可选的,AxHost 调用构造函数时 throwException 参数设置为 false。因此,您看到调试器中引发了第一次机会异常,但随后它再次捕获并 returns。 Fwiw,该代码本来可以很容易地编写,因此您根本看不到异常,但是 Microsoft 程序员采取了一条捷径,使用 catch-em-all 异常处理程序。就是烦人而已。

实现接口绝对不是你的工作,它是控件的工作。所以尝试实现 OnChanged() 和 OnRequestEdit() 没有意义。

继续开车,你没有真正的问题。