信息:我正在VisualStudio2017中使用C#创建游戏
我怎样才能阻止音乐线?即使是不同的形式也有可能吗?我使用这段代码创建线程,在后台播放音乐。
MediaPlayer bg;
public void main()
{
IntializeComponent();
Bg_music();
}
private void Bg_music()
{
new System.Threading.Thread(() =>
{
bg = new System.Windows.Media.MediaPlayer();
bg.Open(new System.Uri(path + "Foniqz_-_Spectrum_Subdiffusion_Mix_real.wav"));
bg.Play();
}).Start();
}当我试图使用此代码停止线程时,它将停止当前打开的窗口,并且音乐/线程继续播放音乐。
bg.Dispatcher.Invoke(() =>
{
bg.Close();
});而且这不起作用
bg.Dispatcher.Invoke(() =>
{
bg.Stop();
});发布于 2018-08-02 10:19:12
假设您确实需要一个后台线程(因为MediaPlayer在WPF上是非阻塞的),您可能希望在C#中使用以下路径之一:
或
发布于 2018-08-01 13:49:43
跨线程对象访问可能很棘手。
一旦在UI线程以外的另一个线程中创建了MediaPlayer实例,访问UI线程中的对象将抛出InvalidOperationException,因为该对象不属于UI线程。
private void Bg_music()
{
bg = new System.Windows.Media.MediaPlayer();
new System.Threading.Thread(() =>
{
bg.Dispatcher.Invoke(()=>{
bg.Open(new System.Uri(path + "Foniqz_-_Spectrum_Subdiffusion_Mix_real.wav"));
bg.Play();
});
}).Start();
}现在,在UI线程中调用MediaPlayer时,不必使用MediaPlayer来停止它。
编辑:即使实现的方法不是最好的实践,仍然值得回答的一些理论信息。
https://stackoverflow.com/questions/51634383
复制相似问题