2012-03-23 36 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!

相關問題