gpt4 book ai didi

c# - 如何在线程被终止时终止播放循环?

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:34 25 4
gpt4 key购买 nike

session 主题:

    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 停止?

最佳答案

你不要杀死线程。如果线程被杀死,它什么也做不了。

只是礼貌地向线程发送消息,要求它停止播放。

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,即使你应该这样做。

关于c# - 如何在线程被终止时终止播放循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com