我写了一个小的Winforms应用程序,可以搜索磁盘上的文件(对于问题来说,文件类型并不重要)。问题在于,可能会有100,000个或更多的文件,因此该操作需要时间。
我想要实现的是将搜索操作作为异步操作进行,并且不要阻塞UI线程,以便窗体不会被卡住。
我可以使用backgroundWorker来做到这一点,但出于某些原因,我无法使用async\await机制。
以下是我的代码:
为什么UI线程会卡住,无法立即显示
我想要实现的是将搜索操作作为异步操作进行,并且不要阻塞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
在哪里,里面有多少个文件? - Hamid Pourjam