2017-09-14 19 views
1

オーディオファイルの再生が停止しているかどうかを確認することはできますか?
オーディオの再生が停止した後にSubをトリガーする必要があります。オーディオの再生が停止したかどうかを検出する

私がして音声を再生:

My.Computer.Audio.Play(My.Resources.music, AudioPlayMode.Background) 
callSubMethodHere() 

しかしそれも、オーディオがまだ
を完了していないメソッドをトリガー私が使用してみました:

My.Computer.Audio.Play(My.Resources.Second, AudioPlayMode.WaitToComplete) 
callSubMethodHere() 

はい! Subを実行する前にオーディオの再生が完了するまで待機します。しかし、それは私のプログラムを凍結し、私のクライアントはそれを望んでいません。

If My.Computer.Audio.Stop = Trueまたはそれ以外の方法で判断する方法はありますか?インターネットで何も見つけられませんでした。 msdnにもそれがないようです。

お願いします。 vb.netまたはc#となります。ありがとう!

+0

一般的にこのようなものは、イベントで処理される、例えば「AudioFinishedEvent」またはそのような何か。しかし、ドキュメントをすばやく見てみると、イベントはなく、非常に基本的な機能であることが示唆されています。そのような場合は、オーディオを再生する別の方法、つまりイベントをサポートするものを見つけることをお勧めします。 – musefan

+0

[この回答をチェック](https://stackoverflow.com/a/17645100/838807) Windows Media Playerライブラリ。私はそれを使用したことはありませんが、答えに基づいて、オーディオが終了したときに処理するためのイベントをサポートするように思われる – musefan

+0

提案に感謝します。やってみます。 – kiLLua

答えて

0

Async/Awaitを使用する。さらに読書:https://msdn.microsoft.com/en-us/library/hh191443.aspx

Class LockingWithAwait 
Public Sub Test() 
    DoSomething() 
End Sub 

Private Sub doSomething() 
    Await Task.Run(Function() PlayTheMusicWithLock()) 
    CallSubMethodHere() 
End Sub 

Private Sub PlayTheMusicWithLock() 
    My.Computer.Audio.Play(My.Resources.Second, AudioPlayMode.WaitToComplete) 
End Sub 

Private Sub CallSubMethodHere() 
    Console.WriteLine("Hello world.") 
End Sub 
End Class 
+0

これは、Await Task.Run(Function()PlayTheMusicWithLock())が の場合の動作です。完了する前に以下の関数を実行しません。 彼がPlayTheMusicWithLock()にCallSubMethodHere()を置き、Form内の何かを変更したい場合、彼はコールバックなどが必要です。 –

関連する問題