Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何强制TextView处理其文本并进行渲染_C#_Gtk - Fatal编程技术网

C# 如何强制TextView处理其文本并进行渲染

C# 如何强制TextView处理其文本并进行渲染,c#,gtk,C#,Gtk,我正在使用GTK,当我将文本插入TextView时,它似乎在后台线程中处理它 我在一行上插入一个文本 我做了一些其他的事情,但就在这一刻,文本甚至还没有呈现在那里 我使用ScrollToItem()使其滚动到底部,但由于文本尚未呈现,因此滚动没有终点,因此实际上什么也没有发生 如果我把卷轴插入某个计时器,它会工作,但速度很慢,很奇怪。(首先绘制文本,然后在绘制完成后跳转到底部,对于长文本,它会跳转几次,因为绘制需要很长时间) 每次我更改Buffer.Text时,控件都会重新绘制所有行(在循环中逐

我正在使用GTK,当我将文本插入TextView时,它似乎在后台线程中处理它

  • 我在一行上插入一个文本
  • 我做了一些其他的事情,但就在这一刻,文本甚至还没有呈现在那里
  • 我使用ScrollToItem()使其滚动到底部,但由于文本尚未呈现,因此滚动没有终点,因此实际上什么也没有发生
  • 如果我把卷轴插入某个计时器,它会工作,但速度很慢,很奇怪。(首先绘制文本,然后在绘制完成后跳转到底部,对于长文本,它会跳转几次,因为绘制需要很长时间)

    每次我更改Buffer.Text时,控件都会重新绘制所有行(在循环中逐行追加,这看起来也很烦人)

    我需要做的是:

  • 将TextView.Buffer.Text更改为其他字符串
  • 强制TextView处理所有文本并立即重新绘制
  • 滚动到底部
  • 例如:

    让我们假设您想要创建一个文本编辑器,它应该打开一个大的文本文件(100000行),打开文件后立即滚动到底部。理想情况下,打开文件,首先看到的是文件的底部。这是许多文本编辑器中发生的情况。我想用这个gtk东西实现这个行为


    如何做到这一点?

    在基于主循环的工具包中,事件驱动编程不是这样工作的。使用使用诸如GTK+之类的主循环的工具箱进行事件驱动编程的基本原则是:决不阻塞主循环

    GTK+不使用单独的线程来渲染和布局:您执行的每个阻塞操作都将阻止运行其他操作,包括绘图、事件处理和您自己的代码


    一旦缓冲区被更新,您应该使用TextBuffer提供的通知信号滚动到TextView的底部;您还应该决不在紧密循环中插入(长)文本:如果您想逐行插入文本,或者更可能是逐块插入文本,您应该将作业细分为更小的部分,并使用空闲回调或超时回调,它将在主循环中执行。

    这不是基于主循环的工具箱中事件驱动编程的工作方式。使用使用诸如GTK+之类的主循环的工具箱进行事件驱动编程的基本原则是:决不阻塞主循环

    GTK+不使用单独的线程来渲染和布局:您执行的每个阻塞操作都将阻止运行其他操作,包括绘图、事件处理和您自己的代码


    一旦缓冲区被更新,您应该使用TextBuffer提供的通知信号滚动到TextView的底部;您还应该永远不要在紧循环中插入(长)文本:如果您想逐行插入文本,或者更可能是逐块插入文本,您应该将作业细分为更小的部分,并使用空闲回调或超时回调,这些回调将在主循环中执行。

    好的,我对事件没有意见,但问题是,控件完成其绘图的事件名称是什么?如果我知道的话,我可以在那个信号上运行scroll to end(顺便说一句,我不是在循环中插入长文本-我是在一行代码中插入长文本(textview.Buffer.text=longtext)。在我看来,如果它是在循环中插入的,根据它的呈现方式-你确定没有办法“加速”吗文本呈现?我想知道有多少用GTK编写的文本编辑器可以处理大型文本文件的打开,因为我从来没有在任何地方看到过我在自己的应用程序中看到的情况…好的,我对事件很满意,但问题是,控件的事件名称是什么?完成它的绘制?如果我知道,我可以在该信号上运行scroll结束(顺便说一句,我不是在循环中插入长文本-我是在一行代码(textview.Buffer.text=longtext)中插入长文本。在我看来,如果它是在循环中插入的,那么它的渲染方式就是这样-你确定没有“加速”的方法吗文本呈现?我想知道有多少用GTK编写的文本编辑器可以处理大型文本文件的打开,因为我从来没有在任何地方看到过我在自己的应用程序中看到的情况。。。