Ok chaps. I have the answer.
It would seem that I had mis-read the purpose of the BeginUpdate/EndUpdate
methods; like many before me I suspect.
These commands actually make the update occur, thus causing the flicker not
I tried all sorts of things, from double-buffering to sub-classing and
filtering the WM_ERASEBKGND message. I even tried LockWindowUpdate from one
of our esteemed number from way back. None of these worked.
The answer is as simple as calling the Update method after adding each item.
Dim lvi As New ListViewItem("Some really important information")
lvi.ForeColor = Color.Green
.EnsureVisible(.Items.Count - 1)
The result is a silky smooth update, with no flicker. No sub-classing,
filtering, or double-buffering required.
Can you tell I'm happy :-))