Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#,visual studio 2010,如何停止方法,线程?_C#_.net_Multithreading_Visual Studio 2010 - Fatal编程技术网

C#,visual studio 2010,如何停止方法,线程?

C#,visual studio 2010,如何停止方法,线程?,c#,.net,multithreading,visual-studio-2010,C#,.net,Multithreading,Visual Studio 2010,我才刚刚开始学习c#(以及一般的编程)。我正在做一个基于弦乐演奏音乐的大学小项目。我正在使用windows窗体。当您按下“播放”按钮a时,它将启动一个带有for循环的方法,该循环将逐个遍历字符串中的每个字符,并播放相应的音符。工作正常,但我一直在尝试添加一个“停止”按钮,在音乐播放时停止音乐,但到目前为止,当音乐播放时,窗体被冻结,我无法按任何其他按钮。。。只是想知道,只有通过不同的线程,我才能实现我想要的吗??(我们还没有真正研究线程!) 编辑: 嘿,谢谢大家的回答!!太快了!:) 只是想知道

我才刚刚开始学习c#(以及一般的编程)。我正在做一个基于弦乐演奏音乐的大学小项目。我正在使用windows窗体。当您按下“播放”按钮a时,它将启动一个带有for循环的方法,该循环将逐个遍历字符串中的每个字符,并播放相应的音符。工作正常,但我一直在尝试添加一个“停止”按钮,在音乐播放时停止音乐,但到目前为止,当音乐播放时,窗体被冻结,我无法按任何其他按钮。。。只是想知道,只有通过不同的线程,我才能实现我想要的吗??(我们还没有真正研究线程!)

编辑: 嘿,谢谢大家的回答!!太快了!:)

只是想知道,只有通过不同的线程,我才能实现我想要的吗


通常,这是最常见的方法。我建议您查看一下组件。它允许您在后台线程上运行工作(“播放备忘”),但也提供取消支持。

您的问题的简单答案是肯定的

您在主线程的循环中播放音乐,这意味着当代码在循环中执行时,您无法从UI接收任何事件


要解决此问题,您需要在后台线程上运行音乐循环。

使用
Application.DoEvents()。ADS是最好的解决方案,但正如我理解您的问题,当您首先学习线程时,您正在等待:)调用
DoEvents()
可以在您调用它时处理窗口消息,因此如果您经常调用它,windows不应该被阻塞。但请考虑这是一个解决办法。最好的解决方案是使用线程。

查看屏幕,在背景中播放音乐。它比自己操作线程简单得多

以下是概述:


这真的不是一个好主意-
DoEvents()
使用起来真的不是一个好方法…@ReedCopsey-我非常理解这一点,只是想给询问者更多的选择:)但是,这是一个“线程很好”的取消支持。。。希望在BGW中运行的代码能够以“友好”的方式编写。。。(因为强制杀死/停止线程是完全不同的蠕虫)@pst-True-但是.NET中所有“好”的取消机制都是合作的,包括新的.NET 4取消支持。杀死线程从来都不是一个好主意。不过,在这种情况下,在播放每个“音符”后,应该很容易检查并完全停止线程。(至少,我认为是这样)哦,我并不反对:)我只是把它扔进去了。对于“停止[ping]一个[method,]thread[s]”意味着什么,有不同的观点。。。