我正在拯救一个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);
{
}
答案 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
,否则代码将无法编译。