Instead of Suspend/ResumeLayout you could try using SetRedraw.
public class RedrawLock : IDisposable
{
#region External Method Definitions
[DllImport("user32.dll")]
static public extern UInt32 SendMessage(IntPtr hWnd, UInt32 msg, UInt32 wParam, UInt32 lParam);
[DllImport("user32.dll")]
static public extern UInt32 RedrawWindow(UInt32 hwnd, UInt32 lprcUpdate, UInt32 hrgnUpdate, UInt32 flags);
#endregion
#region Members and Constants
const int WM_SETREDRAW = 0x000B;
Control window = null;
#endregion
#region Constructor
public RedrawLock(Control winToLock)
{
window = winToLock;
SendMessage(window.Handle, WM_SETREDRAW, 0, 0);
}
#endregion
#region IDisposable Members
public void Dispose()
{
SendMessage(window.Handle, WM_SETREDRAW, 1, 0);
window.Refresh();
RedrawWindow(0, 0, 0, 0x181);
}
#endregion
}
Wrap the code in a using (new RedrawLock(this)) {} block.