C#在每隔X秒的while循环中调用函数,没有阻塞循环

时间:2017-10-04 06:32:52

标签: c# while-loop nonblocking

我在C#中有一个程序,我使用while循环来读取文件中的行。我希望能够每5秒左右显示行号,而不会减慢while循环,这样用户就可以看到它们的距离。任何想法如何做到这一点?

CODE

{{1}}

1 个答案:

答案 0 :(得分:3)

您可以使用BackgroundWorker类来实现此目的。只需看看有关如何初学该课程的MSDN示例。

您可以使用ReportProgress调用为BackgroundWorker创建“DoWork”方法,如下所示:

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;

    Stopwatch sw = Stopwatch.StartNew();
    using (StreamReader sr = new StreamReader(@"path"))
    {
        String line;
        int lines = 0;

        using (System.IO.StreamWriter file = new System.IO.StreamWriter("path"))
        {
            while ((line = sr.ReadLine()) != null)
            {
                file.WriteLine(CreateMD5(line)+':'+line);
                worker.ReportProgress(lines++);
            }
        }
    }
}

要显示进度,您只需在ProgressChanged事件中使用Console.WriteLine()。