MEFも使用する大規模なWPFアプリケーションがあります。特定の条件で音声アラートをトリガーし、ユーザーが指定した時間だけ繰り返したいと考えています。オーディオ ファイルは .wav または .mp3 です。
私はSoundPlayerを利用してオーディオを再生しています。繰り返し間隔に使用するタイマーがわかりません。
オーディオの再生中に UI スレッドをブロックしたくないし、スレッドセーフにしたい。
前もって感謝します。
パブリッシャー サブスクライバー パターンの実装であるイベント アグリゲーションの使用を検討してみませんか。アプリケーションは、オーディオを再生したい状況に遭遇するたびに、イベント アグリゲーターを介してその意図を公開します。
これらのイベントをリッスンし、イベントのタイプに基づいて正しいオーディオを再生するリスナーが存在します。複数のリクエストがある場合、リスナーはそれらを並行して、または順番に再生できます。リスナーと標準のスレッドスリープ内で目的のスレッドモデルを実装できます
このようにして、すべてのオーディオ構成とロジックを 1 つのモジュールの後ろに押し込むことができます。他のすべてのモジュールは、このモジュールに何を再生したいか (オプションでどれくらいの長さか) を「伝える」だけです。
一方、アプリケーションが十分に大きくない限り、上記のアプローチはやり過ぎです。
イベント集約に関する優れた記事 http://codebetter.com/glennblock/2009/02/23/event-aggregation-with-mef-with-and-without-eventaggregator/