キーボードをa,b,c,dと順番に5秒置きに押していくメソッドをBackgroundWorker内で無限ループさせていて
キャンセルボタンを押したときすぐに止まって欲しいのですが必ずdまで押されてから止まるので困っているという感じです

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
play_abcd();

if (backgroundWorker1.CancellationPending)
{
// イベントをキャンセルする
e.Cancel = true;
return;
}
}
}