StreamReader在一个文本框中发布延迟
本文关键字:延迟 布延迟 一个 StreamReader 文本 | 更新日期: 2023-09-27 18:12:00
StreamReader file = new StreamReader(@"C:'Users'User'Documents'Files.txt");
while ((line = file.ReadLine()) != null)
{
richTextBox1.Text += Environment.NewLine + "Copying: " + line;
counter++;
}
我有这个代码读取一个文本文件与多个路径在它。我想做的是将它们发布在一个文本框中,我得到了到目前为止,但我的问题是,我可以在每一行流阅读器要发布之间做1秒延迟吗?
诸如此类:
System.Threading.ThreadPool.QueueUserWorkItem((obj) =>
{
StreamReader file = new StreamReader(@"C:'Users'User'Documents'Files.txt");
string line;
int counter = 0;
while ((line = file.ReadLine()) != null)
{
this.Invoke((Action)(() =>
{
richTextBox1.Text += Environment.NewLine + "Copying: " + line;
}));
System.Threading.Thread.Sleep(1000);
counter++;
}
});
根据上面的注释,也可以使用BackgroundWorker
。
1)使用System.Windows.Forms.Timer
实现以用户定义的时间间隔引发事件的计时器。这个定时器是为在Windows窗体应用程序中使用而优化的,必须在窗口中使用。
2)读取Queue中的所有行。
Queue<string> lines = new Queue<string>( File.ReadAllLines( @"Path" ) );
3)使用定时器事件读取列表中的每行。
private void Timer_Tick( object sender, EventArgs e )
{
if ( lines.Count > 0 )
{
richTextBox1.Text += Environment.NewLine + "Copying: " + lines.Dequeue();
counter++;
}
}
检查是否有空队列。Dequeue方法(lines.Count > 0
或其他,当变为true时停止定时器)
你可以使用系统。每次循环迭代调用一次:Thread.Sleep(1000);
的线程类。
关于系统的更多信息。MSDN上的线程类
编辑:如下所述,使用Thread。Sleep会导致UI在Sleep方法期间被锁定。作为一种替代方法,您可以尝试使用BackgroundWorker类。
下面的代码片段假设您想通过单击按钮来触发上面的代码(从问题中不清楚是否实际是这种情况)。
private void startAsyncButton_Click(object sender, EventArgs e)
{
if(backgroundWorkerA.IsBusy != true)
{
//start the Async Thread
backgroundWorkerA.RunWorkerAsync();
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
StreamReader file = new StreamReader(@"C:'Users'User'Documents'Files.txt");
while ((line = file.ReadLine()) != null)
{
richTextBox1.Text += Environment.NewLine + "Copying: " + line;
counter++;
Thread.Sleep(1000);
}
}
这里您只是创建一个工作线程来完成(相对)耗时的任务,而不会占用您的GUI。