c#有一个richtextbox flush功能

时间:2012-07-27 20:17:04

标签: c# user-interface printing richtextbox flush

问题:

我可以对richtextbox执行类似flush的功能吗?

理由:

我正在使用循环将~20-40行文本一次写入richtextbox,我的问题是整个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");
                }

2 个答案:

答案 0 :(得分: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); 
        }
    }
}

答案 1 :(得分:1)

最好的办法是在单独的线程上处理它,并使用BeginInvoke方法编写所需的文本。这应该使主UI保持响应。

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