延迟每行输出到文件

本文关键字:文件 输出 延迟 | 更新日期: 2023-09-27 17:54:28

我正在下载一个Windows 8手机应用程序。我有一个从文本框中搜索特定文本的方法,如果找到,则将其输出到列表框。我试图延迟每行写入列表框的输出,所以理想情况下,它将是第一行,等待5秒,第二行,等待5秒,等等。目前,它只是先延迟,然后立即输出它找到的所有行。

嫌疑犯。文字是我正在寻找的Results是它被发送到的列表框。

public void ReadFile()
 {
   var str = Application.GetResourceStream(new Uri("MACAddresses.txt", UriKind.Relative));
   List<string> lines = new List<string>();
   using (StreamReader r = new StreamReader(str.Stream))
   {
      string line;
      while ((line = r.ReadLine()) != null)
      {
        if(line.Contains(Suspect.Text))
         {
           lines.add(line);
         }
       }
   {
   foreach (string output in lines)
   {
     Thread.sleep(1000);
     results.items.add(output);
   {
 }

延迟每行输出到文件

那是因为你阻塞了UI线程,所以它不能更新ListBox。解决这个问题是异步编程的好工作:

public async Task ReadFile()
 {
   var str = Application.GetResourceStream(new Uri("MACAddresses.txt", UriKind.Relative));
   List<string> lines = new List<string>();
   using (StreamReader r = new StreamReader(str.Stream))
   {
      string line;
      while ((line = r.ReadLine()) != null)
      {
        if(line.Contains(Suspect.Text))
         {
           lines.add(line);
         }
       }
   }
   foreach (string output in lines)
   {
     await Task.Delay(1000);
     results.items.add(output);
   }
 }

请注意在方法签名前增加了async关键字,返回类型更改为Task。您必须使用await键盘才能正确调用ReadFile方法:

await ReadFile(); // Don't forget to use the await keyword!

调用ReadFile的方法也必须标记为async,否则代码无法编译。