Вам либо нужно выполнить воспроизведение на фоновом потоке, либо вам нужно пульсировать насос сообщений с окнами, чтобы дать время UI реагировать на ввод. Это последнее:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
while(checkBox1.Checked == true)
{
Play();
Application.DoEvents();
}
}
DoEvents вызывает окна для обработки сообщений (например, вход UI), которые в настоящее время в очереди сообщений. Без него оконные сообщения никогда не обрабатываются, потому что Play находится в потоке пользовательского интерфейса, и у насоса сообщений никогда не будет возможности запускать, поэтому, даже если вы неистово нажимаете на этот флажок, окна никогда не смогут сообщить об этом вашему приложению.
Существует множество способов сделать это с помощью Play на фоне. Эти примеры немного более востребованы, чем подход DoS-сообщений на основе сообщений.
Голые в виду, что многопоточность является более продвинутой подход, который может быть сложнее правильно реализовать, хотя что-то стоит понимание.
WinForms? ASP.NET? Что-то другое? – Tim
Я думаю, вам нужно использовать if block вместо блока. Я предполагаю, что ваш цикл находится в методе Play(). – Jayee
Извините, Winforms. –