0

问题:

我可以对富文本框执行类似刷新的功能吗?

原因:

我正在使用循环一次向 Richtextbox 写入约 20-40 行文本,我的问题是整个 GUI 在那段时间冻结,并且在所有内容都写入richtextbox 并且代码继续之前什么都看不到。如果可能的话,我想立即将每一行写到屏幕上以避免冻结。我知道在控制台中我可以使用 aFileStream.Flush() 命令来执行此功能。aFileStream.appendtext() 有类似的功能吗?我的 googleFu 今天很弱,我在网上找不到任何这样的例子。任何帮助表示赞赏。

示例代码:

 foreach (string fullPath in appDataDirectories)
                {
                    //update progess bar
                    progresbarupdate();
                    //split file path in to parts
                    string[] folders = fullPath.Split('\\');
                    //print out create time for directory
                    DateTime creationTimeUtc = Directory.GetCreationTimeUtc(fullPath);
                    String ctime = creationTimeUtc.ToString();
                    //create String
                    String printable = String.Format("{0,-50}\t{1}", ctime, fullPath);
                    output.AppendText(printable + "\n");
                }
4

2 回答 2

2

我不这么认为,您将能够通过刷新来解冻 RichTextBox

您可以使用BackgroundWorker在单独的线程上在后台做一些工作,然后调用 RichTextBox 的 Text 操作

请看我的例子,显示 RichTextBox 没有冻结

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        BackgroundWorker bg = new BackgroundWorker();
        bg.DoWork += new DoWorkEventHandler(bg_DoWork);
        bg.RunWorkerAsync();
    }

    void bg_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 0; i < 1000000000; i++)
        {
            Action action = () => richTextBox1.Text += "Line Number " + i;
            richTextBox1.Invoke(action); 
        }
    }
}
于 2012-07-27T20:40:51.657 回答
1

你最好的办法是在一个单独的线程上处理这个问题,并使用 BeginInvoke 方法来编写你想要的文本。这应该保持主 UI 响应。

http://msdn.microsoft.com/en-us/library/0b1bf3y3.aspx

于 2012-07-27T20:44:06.073 回答