将每行的输出延迟到文件

时间:2014-03-27 21:48:39

标签: c# windows-phone-8

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

suspect.text是我正在寻找的 结果是它被发送到的列表框。

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);
   {
 }

1 个答案:

答案 0 :(得分:1)

那是因为你阻止了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,否则代码将无法编译。