違うなぁ……。
やるならこう。

private void button1_Click(object sender, EventArgs e) {
    new Thread(new ThreadStart(AddItems)).Start();
}
private void AddItems() {
    AddItemCallback callback = new AddItemCallback(AddItem);
    for (int i = 0; i < 20; i++) {
        Thread.Sleep(200);
        ListViewItem item = new ListViewItem(i.ToString());
        this.Invoke(callback, new object[]{item});
    }
}
private delegate void AddItemCallback(ListViewItem item);
private void AddItem(ListViewItem item) {
    this.listView1.Items.Add(item);
}

>>90のコードじゃ、for 内の丸ごと Invoke させてるわけで、つまりそれ全部メインスレッドで動いちゃってる。
正しくは Invoke させるのは Items.Add だけ。