Я нашел странные аномалии в текстовом виде GTK, надеюсь, кто-то сможет их объяснить.Как я могу автоматически прокручивать донизу в GTK TextView
Существует простая функция для прокрутки в нижней части окна:
richTextBox.ScrollToIter(richTextBox.Buffer.EndIter, 0, true, 0, 0);
это, вероятно, должно работать и работать в большинстве случаев. Но иногда это приводит к сбою всего приложения с помощью MemoryAccessViolation (SIGSEGV in linux)
Мое приложение вызывает это каждый раз, когда я вставляю текст в TreeView, чтобы я всегда был вниз (вы вставляете текст в какое-то окно, и вы хотите видеть последний текст, например, в чате)
Текст вводится только из основного потока, и эта функция ТАКЖЕ вызывается только в основном потоке, поэтому это не может быть связано с многопоточным в моем собственном приложении, однако я узнал что TextView передает текст асинхронно с остальной частью приложения. Например, если поток, ответственный за покраску и обработку текста, на самом деле не является основным потоком. Например, если я загружаю огромный текст в TextView, мое приложение отвечает, даже если TextView каким-то образом загружает текст.
По этой причине я считаю, что TextView фактически работает с собственным отдельным потоком, и этот поток меняет текст, когда я пытаюсь прокрутить окно. Измененный текст аннулирует итератор, поэтому где-то между IL-кодом, в котором я передаю richTextBox.Buffer.EndIter
функции TextView ScrollToBottom, текст, вероятно, изменен этим внешним потоком, и iter недействителен, поэтому я получаю это исключение доступа к памяти.
Это может быть даже ошибка в GTK, но я использую очень стабильную версию (2.1.20), которая поставляется со всеми моно версиями до mono3 и даже для всех окон gtk #.
Есть ли другой способ, чтобы прокрутить вниз «безопасно»