Методы расширения RichTextBox BeginUpdate () EndUpdate () не работают

У меня есть richTextBox, который я использую для подсветки синтаксиса. Это небольшая функция редактирования, поэтому я не писал настраиваемый выделитель синтаксиса - вместо этого я использую Regex s и обновляюсь при обнаружении задержки ввода с помощью обработчика событий для приложения .Неактивное событие :

Application.Idle += new EventHandler(Application_Idle);

в обработчике событий я проверяю время, в течение которого текстовое поле было неактивным:

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;
   }
}

Но даже для относительно небольших выделений RichTextBox сильно мерцает и не имеет ] richTextBox.BeginUpdate () / EndUpdate () методы. Чтобы преодолеть это, я нашел ответ на аналогичную дилемму Ханса Пассанта (Ганс Пассан никогда меня не подводил!):

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; 
} 

Однако это вызывает у меня странное поведение при обновлении; курсор замирает / замирает и не показывает ничего, кроме полос странного вида (см. изображение ниже).

Odd Error Caused by RichTextBox Method Extension

Я явно не могу использовать альтернативный поток для обновления пользовательского интерфейса, так что я здесь делаю не так?

Спасибо за ваше время.

6
задан Community 23 May 2017 в 12:30
поделиться