问题:
我可以对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");
}
答案 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保持响应。