关于在表单中放置AxWMPLib.AxWindowsMediaPlayer的System.ArgumentException

时间:2016-08-24 14:39:31

标签: c# exception-handling argumentexception axwindowsmediaplayer

我有一个标准Form,只有AxWMPLib.AxWindowsMediaPlayer,除自动生成外没有其他代码。我在每次应用开始时都会System.ArgumentException两次。它说,该对象不提供IPropertyNotifySink接口。但是如何实现它,因为我还没有包含它的命名空间(Microsoft.VisualStudio.OLE.Interop)?我在实现的函数(OnChanged(Int32)OnRequestEdit(Int32))中需要做些什么?

1 个答案:

答案 0 :(得分:1)

这是一次正常的事故。一个表现良好的ActiveX对象应该实现IPropertyNotifySink接口(非托管 COM接口),但不需要这样做。 AxHost包装器类只是盲目地假设它,所以尝试订阅它,但是内部的ConnectionContainer构造函数发现它没有。

致命,因为实现接口是可选的,AxHost会将 throwException 参数设置为false来调用构造函数。所以你看到调试器中引发的第一次机会异常,但它再次捕获并返回。 Fwiw,该代码可以非常容易地编写,所以你根本不会看到异常,但是微软程序员采用了一个带有catch-em-all异常处理程序的快捷方式。只是讨厌,这就是全部。

实施界面绝对不是 你的工作,它是控制的工作。因此,尝试实现OnChanged()和OnRequestEdit()是没有意义的。

只要保持驾车,你就不会有真正的问题。