延迟每行输出到文件
本文关键字:文件 输出 延迟 | 更新日期: 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
,否则代码无法编译。