2012-03-23 37 views
0

我创建了一个类,它来自System.Windows.Media.AudioSink以提供录制功能。要检查我的混凝土水槽的状态我做了以下内容:检查CaptureSource.State时出现InvalidOperationException

public class MyViewModel 
{ 
    private readonly MyAudioSink _myAudioSink; // this field is ensured in the ctor 
    public bool IsRecording 
    { 
     get 
     { 
      if (this._myAudioSink == null) 
      { 
       return false; // I know that `false` is wrong ... 
      } 
      return this._myAudioSink.CaptureSource.State == CaptureState.Started; 
     } 
    } 
} 

有时,当我询问对proprety IsRecording,我得到以下异常:

{System.InvalidOperationException: Capture source is not stopped 
    at MS.Internal.XcpImports.CheckHResult(UInt32 hr) 
    at MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, DependencyObject doh) 
    at System.Windows.DependencyObject.SetValue(DependencyProperty property, DependencyObject doh) 
    at System.Windows.Media.CaptureSource..ctor() 
    at MS.Internal.CoreTypes.GetCoreWrapper(UInt32 typeId) 
    at MS.Internal.ManagedPeerTable.EnsureManagedPeer(IntPtr unmanagedPointer, Int32 typeIndex, Type type, Boolean preserveManagedObjectReference) 
    at MS.Internal.XcpImports.ConvertDO(IntPtr doPointer, Int32 typeIndex, Boolean releaseObjectReference) 
    at MS.Internal.XcpImports.ConvertType(CValue outVal, Int32 typeIndex, Boolean releaseObjectReference, Boolean deleteBuffer, IManagedPeerBase fromObject) 
    at MS.Internal.XcpImports.AudioSink_GetSource(AudioSink Sink) 
    at System.Windows.Media.AudioSink.get_CaptureSource() 
    at MyViewModel.get_IsRecording() 

有时候,当我做this._myAudioSink.Stop(),我得到以下(类似)例外:

{System.InvalidOperationException: Capture source is not stopped 
    at MS.Internal.XcpImports.CheckHResult(UInt32 hr) 
    at MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, DependencyObject doh) 
    at System.Windows.DependencyObject.SetValue(DependencyProperty property, DependencyObject doh) 
    at System.Windows.Media.CaptureSource..ctor() 
    at MS.Internal.CoreTypes.GetCoreWrapper(UInt32 typeId) 
    at MS.Internal.ManagedPeerTable.EnsureManagedPeer(IntPtr unmanagedPointer, Int32 typeIndex, Type type, Boolean preserveManagedObjectReference) 
    at MS.Internal.XcpImports.ConvertDO(IntPtr doPointer, Int32 typeIndex, Boolean releaseObjectReference) 
    at MS.Internal.XcpImports.ConvertType(CValue outVal, Int32 typeIndex, Boolean releaseObjectReference, Boolean deleteBuffer, IManagedPeerBase fromObject) 
    at MS.Internal.XcpImports.AudioSink_GetSource(AudioSink Sink) 
    at System.Windows.Media.AudioSink.get_CaptureSource() 

那么...这是什么原因?我怎样才能防止这种异常(除了介绍我自己的领域,并将其设置在OnCaptureStartedOnCaptureStopped的覆盖范围内)?

我在网上找到了这个问题的唯一话题就是here ......

回答

0

我结束了重写特定命令(OnCaptureStoppedOnCaptureStarted,..)封装在我的模型状态AND在独立的字段中封装了我的具体音频接收器中的captureSource。

很明显,这是诀窍,我再也没有任何问题。

PS:我在某处读到captureSource的封装应该足够了 - atm我无法提供链接......它在某处,sry!

相关问题