【问题标题】:System.ArgumentException on putting AxWMPLib.AxWindowsMediaPlayer in Form将 AxWMPLib.AxWindowsMediaPlayer 放入表单时出现 System.ArgumentException
【发布时间】:2016-08-24 14:39:31
【问题描述】:

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

【问题讨论】:

  • 您是否更改了任何属性,或者您只是添加了组件并进行了调试?
  • @VisualVincent 刚刚添加了组件,仅此而已。
  • 奇怪,你用的是什么操作系统?
  • From what I've been able to find so far 重置异常应该可以解决问题。请确保重置时System.ArgumentException 仍未被选中。
  • 你没有忽略异常,你只是忽略了那些已经被 try/catch 块处理的异常。 未处理的异常,这将导致您的应用程序停止执行,仍然会被抛出。

标签: c# exception-handling argumentexception axwindowsmediaplayer


【解决方案1】:

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

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

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

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

【讨论】:

  • 这个接口最初是为了什么而创建的?
  • 允许 ActiveX 主机报告对具有环境行为的库存属性的更改。 Font 属性将是一个标准示例,控件通常使用与其父级相同的字体。 BackColor 是另一种。不适用于 WMP,它的行为不像您在 WPF 或 Winforms 工具箱中找到的那种控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多