首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中停止线程?

如何在C#中停止线程?
EN

Stack Overflow用户
提问于 2018-08-01 13:19:24
回答 2查看 1.8K关注 0票数 3

信息:我正在VisualStudio2017中使用C#创建游戏

我怎样才能阻止音乐线?即使是不同的形式也有可能吗?我使用这段代码创建线程,在后台播放音乐。

代码语言:javascript
复制
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();                        
}

当我试图使用此代码停止线程时,它将停止当前打开的窗口,并且音乐/线程继续播放音乐。

代码语言:javascript
复制
bg.Dispatcher.Invoke(() =>
{
    bg.Close();
});

而且这不起作用

代码语言:javascript
复制
bg.Dispatcher.Invoke(() =>
{
    bg.Stop();
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-02 10:19:12

假设您确实需要一个后台线程(因为MediaPlayer在WPF上是非阻塞的),您可能希望在C#中使用以下路径之一:

  1. 使用取消令牌&任务: Uri(@"D:\Songs\201145-Made_In_England__Elton_John__320.mp3"));MediaPlayer bg;只读CancellationTokenSource tokenSource =新CancellationTokenSource();公共MainWindow() { InitializeComponent();Bg_music();}私有虚Bg_music() {Task.Run() => {Task.Run()=新MediaPlayer();bg.Open(新Task.Run bg.Play();bg.Play();同时(真){ if (tokenSource.Token.IsCancellationRequested) { bg.Stop();bg.Stop();},tokenSource.Token);}私有ButtonBase_OnClick(对象发送方,RoutedEventArgs e) { tokenSource.Cancel();} }

  1. 使用事件通过任务进行通信。(停止使用线程,我们现在有任务了)
票数 2
EN

Stack Overflow用户

发布于 2018-08-01 13:49:43

跨线程对象访问可能很棘手。

一旦在UI线程以外的另一个线程中创建了MediaPlayer实例,访问UI线程中的对象将抛出InvalidOperationException,因为该对象不属于UI线程。

代码语言:javascript
复制
    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来停止它。

编辑:即使实现的方法不是最好的实践,仍然值得回答的一些理论信息。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51634383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档