BackgroundWorker process for Windows Media Player

本文关键字:Media Player Windows for process BackgroundWorker | 更新日期: 2023-09-27 17:59:10

我需要一些帮助来为Windows Media Player音频设置BackgroundWorker进程。我需要直接从BackgroundWorker运行音频(WMP),而不是从主线程运行,并且后台进程需要保持打开状态,直到音频文件结束,但即使音频在PLAY上开始正常播放,BackgroundWorkers也会停止,因此我不认为音频实际上在第二个线程或BackgroundWorker上播放,因为它已经关闭。

我的问题是,如何使用Windows Media Player(WMPLib)从backgroundWorker播放此音频文件,该文件将一直打开到歌曲结束?

using WMPLib;
namespace mediaplayer
{
    public partial class MainWindow : Window
    {
        BackgroundWorker m_audioProcessingWorker;

        public MainWindow()
        {
            InitializeComponent();            
        }
        string filename = @"C:'audio'song1.mp3"

        private void button_play_Click(object sender, EventArgs e)
        {
           // Create the Audio Processing Worker (Thread)
           m_audioProcessingWorker = new BackgroundWorker();
           m_audioProcessingWorker.DoWork += new DoWorkEventHandler(audioProcessingWorker_DoWork);
           m_audioProcessingWorker.RunWorkerAsync();
           m_audioProcessingWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(audioProcessingWorker_Completed);
        }

        private void audioProcessingWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            try
              {
               axWindowsMediaPlayer1.URL = filename;
               axWindowsMediaPlayer1.Ctlcontrols.play();
              }
            catch (Exception ex)
              {
                 MessageBox.Show(ex.Message);
              }
        }
        private void audioProcessingWorker_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("Audio is finished");
        }

        private void button_stop_Click(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.Ctlcontrols.stop();
            m_audioProcessingWorker.CancelAsync();
        }
        private void button_pause_Click(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.Ctlcontrols.pause();
        }

    }
}

谢谢。

BackgroundWorker process for Windows Media Player

我的UI导致音频播放冻结或暂停当在同一个Thread UI中加载大块数据时更喜欢让音频进程在单独的线程上运行为什么我想到CCD_ 1。

您应该使用BackgroundWorker(或者更好的是,Task.Run或自然异步IO API)在后台加载大块数据,并保持主UI线程没有延迟。然后在UI线程上创建并使用WMP控件。

如果您不能以这种方式重构代码,并且希望为WPM使用后台线程,请记住,这样的线程必须泵送Windows消息,否则WPM控件可能无法正常工作。为此,您可以从这里使用我的ThreadWithAffinityContext