2.0のBackgroundWorkerでちょっとお尋ねしたいんですが、Windowsフォームに
BackgroundWorker開始用のボタン button1、キャンセル用のボタン button2、出力用のテキストボックス textbox1を
作成し、簡単なコードをいれて実行したのですがループの中に
System.Threading.Thread.Sleep(20);
といれておかないとフォームも正しく描画されず、また、キャンセルボタンを押してもスレッドが停止されないのですが
これはこういう仕様なのでしょうか。それとも、実装の仕方を間違えているのでしょうか。

コードは下記のとおりになります:

private void button1_Click(object sender, EventArgs e)
{
 backgroundWorker1.RunWorkerAsync();
}

private void button2_Click(object sender, EventArgs e)
{
 backgroundWorker1.CancelAsync();
}