─<環境>────────────────────────────
OS : Windows7 64bit
ソフト : Microsoft Visual Studio 2005 Academic Edition
言語 : ManagedDirectX、C#
─────────────────────────────────
MP3ファイルを DirectX.AudioVideoPlayback.Audioに格納し
最後まで再生したら、Audio.Ending イベントにより先頭から再生するといった
ループ再生処理を作成したいと考えております。
現状は本スレッド処理でファイルを読み込み、問題なく動作しておりますが
読み込み時間短縮のため、BackgroundWorker を用いて
別スレッドで読み込んだところ、Audio.Ending イベントが実行されない事象が発生しました。
以下、全体ではありませんが問題部の大まかなソースとなります。
public Audio sound = null;
[STAThread]
static void Main() ────────────────
{
// ■■■trueにするとループ再生しない■■■
bool flg_bg_load = false;
sound = new Audio();
if (flg_bg_load == true)
{
BGwork.RunWorkerAsync();
}
else
{
sound = Audio.FromFile("./objects/sound.mp3");
sound.Ending += new System.EventHandler(DX.EndSound);
}
// サウンド再生
sound[0].Play();
bool flg_loop = true;
do
{
// サウンドの再生終了(Ending)を監視
Application.DoEvents();
// ウィンドウを閉じたら終了
if (Form.Visible == false) flg_loop = false;
} while (flg_loop == true);
return;
}
// 別スレッド読み込み ──────────────
static private void BGwork_DoWork(
object sender, System.ComponentModel.DoWorkEventArgs e)
{
sound = Audio.FromFile("./objects/sound.mp3");
sound.Ending += new System.EventHandler(EndSound);
}
// サウンド終了時イベント ────────────
public void EndSound(object sender, System.EventArgs e)
{
Audio audio = (Audio)sender;
if (sound == audio) sound.CurrentPosition = 0;
}
自分なりに調べましたが、原因にたどり着くことができませんでしたので
この現象の理由、ないし調べる方法などアドバイス頂ければと思い質問させて頂きました。
以上です、ご協力お願い致します。