当线程被终止时,我如何终止播放循环
本文关键字:终止 何终止 播放 循环 线程 | 更新日期: 2023-09-27 18:27:45
满足线程:
public void TimerFunc(){
...
while (true)
{
...
sound.PlayLooping();
// Displays the MessageBox and waits for user input
MessageBox.Show(message, caption, buttons);
// End the sound loop
sound.Stop();
...
}
}
线程通过主界面中的一个按钮启动,也可以通过界面中的按钮终止。
如果线程在等待用户输入时被终止,我该如何停止声音循环?
您不会终止线程。如果线程被终止,它将无法执行任何操作。
只是礼貌地向线程发送一条消息,要求它停止播放。
private volatile bool canContinue = true;
public void TimerFunc(){
...
while (true && canContinue)
{
...
sound.PlayLooping();
// Displays the MessageBox and waits for user input
MessageBox.Show(message, caption, buttons);
// End the sound loop
sound.Stop();
...
}
}
public void StopPolitely()
{
canContinue = false;
}
主界面上的按钮将只调用thread.StopPolitely()
并以干净的方式终止线程。如果你想让它更快地终止,你可以考虑其他更积极的解决方案,比如更频繁地检查canContinue
,或者使用Thread.Interrupt()
唤醒线程,即使它在阻塞调用中很忙(但你必须管理中断)由于它只是一个bool,而且是单个编写器/单个读取器,所以您甚至可以避免将其声明为volatile
,即使您应该这样做。