C#中如何停止线程?

2024-01-21

信息:我正在 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# 中使用以下路径之一:

  1. 使用取消令牌和任务:

        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

  1. 使用事件通过任务进行通信。 (停止使用线程,我们现在有任务)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#中如何停止线程? 的相关文章

随机推荐