private void button1_Click(object sender, EventArgs e) {
button1.Enabled = false;
//重い処理
button1.Enabled = true;
}

上のコードでもユーザーが最初のクリックをしてから
イベントハンドラが呼ばれてEnabled = falseが設定されて
さらにそれからクリックできなくなるまでの間に
複数回のクリックが発生する可能性がある
(Windowメッセージのキューに溜まる)

だからEnabled = trueに戻す前に
溜まったクリックイベントを流してやる必要がある