2013-04-11 57 views
0

这可能很简单,但我有一个WPF应用程序,它有一个按钮,一个文本区域和另一个按钮。如果我点击按钮1,那么程序会创建一个名为player的WaveOutEvent并播放音频文件。但是,一旦开始播放,我什么都不能做,甚至关闭表单(并且无法输入文本区域)。是否有可能在后台播放文件?任何想法如何我可以解决这个问题?对不起,我是C#的新手。这里有一些代码:程序与NAudio冻结

private void button1_Click_1(object sender, RoutedEventArgs e) 
    { 
     Program p = new Program(textBox1.Text); 
     p.Tempo = float.Parse(textBox2.Text); 
     label2.Content = p.totalTime; 
    } 
    //assuming this has been called after initialization 
    public void playAudio(string filename) 
    { 
     WaveStream rdr; 

     if (filename.EndsWith(".aiff")) 
     { 
      rdr = new AiffFileReader(filename); 
     } 
     else if (filename.EndsWith(".mp3")) 
     { 
      rdr = new Mp3FileReader(filename); 
     } 
     else if (filename.EndsWith(".wav")) 
     { 
      rdr = new WaveFileReader(filename); 
     } 
     else 
     { 
      //System.Windows.MessageBox.Show("File not supported."); 
      rdr = new Mp3FileReader(filename); 
     } 

     volumeStream = new WaveChannel32(rdr); 
     player = new WaveOutEvent(); 
     player.Init(volumeStream); 
     format = volumeStream.WaveFormat; 
     totalTime = volumeStream.TotalTime; 
     inputProvider = new AdvancedBufferedWaveProvider(format); 
     player.Init(inputProvider); 
     player.Play(); //freezes application after starting to play 
     //processAudio(); 
    } 

感谢您的帮助!

+0

AdvancedBufferedWaveProvider是做什么的?你有没有试过在Visual Studio中打破目前发生的事情? – 2013-04-12 07:13:17

回答

0

尝试使用Background Worker播放音频。

+0

WaveOutEvent已经创建了一个后台线程来播放音频,所以这将不起作用。 – 2013-04-12 07:13:41

+0

@MarkHeath感谢您的意见,我不知道。他的问题听起来很像UI线程阻塞问题。 – 2013-04-12 07:18:07