当线程被终止时,我如何终止播放循环

本文关键字:终止 何终止 播放 循环 线程 | 更新日期: 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,即使您应该这样做。