信息:我正在 Visual Studio 2017 中使用 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();
});
假设您确实需要一个后台线程(因为 MediaPlayer 在 WPF 上是非阻塞的),您可能需要在 C# 中使用以下路径之一:
-
使用取消令牌和任务:
MediaPlayer bg;
readonly CancellationTokenSource tokenSource = new CancellationTokenSource();
public MainWindow()
{
InitializeComponent();
Bg_music();
}
private void Bg_music()
{
Task.Run(() =>
{
bg = new MediaPlayer();
bg.Open(new Uri(@"D:\Songs\201145-Made_In_England__Elton_John__320.mp3"));
bg.Play();
bg.Play();
while (true)
{
if (tokenSource.Token.IsCancellationRequested)
{
bg.Stop();
break;
}
}
}, tokenSource.Token);
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
tokenSource.Cancel();
}
}
or
- 使用事件通过任务进行通信。 (停止使用线程,我们现在有任务)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)