s métodos de extensão @RichTextBox BeginUpdate () EndUpdate () não estão funcionando

Eu tenho um richTextBox que estou usando para executar algum destaque de sintaxe. Este é um pequeno recurso de edição, por isso não escrevi um marcador de sintaxe personalizado. Em vez disso, estou usandoRegexs e atualização após a detecção de um atraso de entrada usando um manipulador de eventos para oApplication.Idle evento:

Application.Idle += new EventHandler(Application_Idle);

no manipulador de eventos, verifico o tempo em que a caixa de texto ficou inativa:

private void Application_Idle(object sender, EventArgs e)
{
    // Get time since last syntax update.
    double timeRtb1 = DateTime.Now.Subtract(_lastChangeRtb1).TotalMilliseconds;

   // If required highlight syntax.
   if (timeRtb1 > MINIMUM_UPDATE_DELAY)
   {
       HighlightSyntax(ref richTextBox1);
       _lastChangeRtb1 = DateTime.MaxValue;
   }
}

Mas mesmo para destaques relativamente pequenos, oRichTextBox pisca fortemente e não temrichTextBox.BeginUpdate()/EndUpdate() métodos. Para superar isso, encontreiesta resposta a um dilema semelhante de Hans Passant (Hans Passant nunca me decepcionou!):

using System; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

class MyRichTextBox : RichTextBox 
{ 
    public void BeginUpdate() 
    { 
        SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); 
    }

    public void EndUpdate() 
    { 
        SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero);  
    } 

    [DllImport("user32.dll")] 
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); 
    private const int WM_SETREDRAW = 0x0b; 
} 

No entanto, isso me dá um comportamento estranho após uma atualização; o cursor morre / congela e não mostra nada além de listras de aparência estranha (veja a imagem abaixo

Eu claramente não posso usar um segmento alternativo para atualizar a interface do usuário, então o que estou fazendo de errado aqu

Obrigado pelo seu tempo

questionAnswers(2)

yourAnswerToTheQuestion