Я задал оригинальный вопрос, и лучшим ответом для меня было использование BoltBait SendMessage () с WM_SETREDRAW. Кажется, что у него меньше побочных эффектов, чем при использовании метода WndProc, и в моем приложении он работает вдвое быстрее, чем LockWindowUpdate.
В моем расширенном классе RichTextBox я просто добавил эти два метода и вызываю их всякий раз, когда мне нужно прекратить перерисовку заново, пока я выполняю некоторую обработку. Если бы я хотел сделать это извне класса RichTextBox, я думаю, что это сработало бы, просто заменив «this» ссылкой на ваш экземпляр RichTextBox.
private void StopRepaint()
{
// Stop redrawing:
SendMessage(this.Handle, WM_SETREDRAW, 0, IntPtr.Zero);
// Stop sending of events:
eventMask = SendMessage(this.Handle, EM_GETEVENTMASK, 0, IntPtr.Zero);
}
private void StartRepaint()
{
// turn on events
SendMessage(this.Handle, EM_SETEVENTMASK, 0, eventMask);
// turn on redrawing
SendMessage(this.Handle, WM_SETREDRAW, 1, IntPtr.Zero);
// this forces a repaint, which for some reason is necessary in some cases.
this.Invalidate();
}