见面线程:
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();
...
}
}
线程由主界面中的按钮启动,并且可以被界面中的按钮杀死。
如果线程在等待用户输入时被杀死,我如何让soundloop停止?
答案 0 :(得分:1)
你不要杀死线程。如果线程被杀死,它就无法做任何事情。
礼貌地向帖子发送消息,要求它停止播放。
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
,即使你应该这样做。