2013年4月28日 星期日

C# 播放mp3(執行緒無法播放解決篇)



在C#語言中欲播放mp3可使用Media Player控件或者是WindowsAPI 中的mciSendString,在此以mciSendString為例。

1.各函式可分為四個參數

  (1)發送命令字串通常是[指令][設備別名]。
  (2)返回訊息的緩衝區,為一指定大小的字串。
  (3)緩衝區的大小。
  (4)回調方式,一般設為0。

2.命令參數

    (1)close:關閉設備
    (2)open:開啟設備(加上檔名 別名)e.g:open test.mp3 alias media
    (3)play media:播放mp3
    (4)pause media:暫停

3.設計MP3Player類別


public class MP3Player
    {              
        public void Play(string FilePath)
        {
            mciSendString("close all", "", 0, 0);
            mciSendString("open " + FilePath + " alias media", "", 0, 0);
            mciSendString("play media", "", 0, 0);
        }
        public void Pause()
        {
            mciSendString("pause media", "", 0, 0);
        }
        public void Stop()
        {
            mciSendString("close media", "", 0, 0);
        }
        [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
        private static extern int mciSendString(
         string lpstrCommand,
         string lpstrReturnString,
         int uReturnLength,
         int hwndCallback
        );
    }

4.使用方式

 MP3Player mp3 = new MP3Player();
 mp3.Play(path);

5.注意事項 

若設計時牽扯到執行緒時可能會造成無法播放,因此要將之設定為單一執行緒即可。
Thread thread = new Thread(new ThreadStart(dowork));
thread.SetApartmentState(ApartmentState.STA);//在此設定
thread.Start();

沒有留言:

張貼留言