【发布时间】:2016-03-13 02:35:43
【问题描述】:
我写了一个小的 winforms 应用程序来搜索磁盘上的文件(为了这个问题,什么文件并不重要)。问题是它甚至可以是 100,000 个文件左右。所以这个操作需要时间。
我想要实现的是将搜索操作作为异步操作进行,而不是阻塞 UI 线程,这样表单就不会卡住。
我可以使用 backgroundWorker 执行此操作,但由于某种原因不能使用 async\await 机制。
这是我的代码:
private async void button_FindFiles_Click(object sender, EventArgs e)
{
await SearchFilesUtil.SearchPnrFilesAsync(this.textBox_mainDirectory.Text);
MessageBox.Show("After SearchPnrFilesAsync");
}
public async static Task SearchPnrFilesAsync(string mainDir)
{
foreach (string file in Directory.EnumerateFiles(mainDir, ".xml", SearchOption.AllDirectories))
{
var fileContenet = File.ReadAllText(file);
var path = Path.Combine(@"C:\CopyFileHere", Path.GetFileName(file));
using (StreamWriter sw = new StreamWriter(path))
{
await sw.WriteAsync(fileContenet);
}
}
}
为什么 UI 线程卡住而不立即显示 MessageBox?
我错过了什么?
【问题讨论】:
-
mainDir在哪里,里面有多少文件? -
mainDir在c盘,目录树可以有200-300k的文件
标签: c# .net winforms asynchronous async-await