【发布时间】:2017-10-22 15:26:15
【问题描述】:
我正在使用Directory.GetFiles() 搜索多文件夹目录中的文件,其中一些文件夹太大,因此搜索可能需要长达 60 秒。在下面的代码中,搜索在用户停止输入后一秒钟开始,当用户输入文件名并且在输入时不暂停时,这非常有效,但如果他/她在单词中间暂停,搜索将开始并会即使他/她再次开始打字,也不会停止直到它完成。
我想做的是在用户输入时停止搜索,可能在 inputFileName_TextChanged 方法中。
使用Directory.GetFiles时,有没有办法停止已经开始的搜索?
using System.Timers;
using System.IO;
namespace findFileTest
{
public partial class MainWindow : Window
{
Timer timer = new Timer();
public MainWindow()
{
InitializeComponent();
timer.Elapsed += new ElapsedEventHandler(TimerEvent);
timer.Interval = 1000;
timer.Enabled = true;
timer.Stop();
}
private void inputFileName_TextChanged(object sender, TextChangedEventArgs e)
{
// How to stop the search currently in process here
timer.Stop();
timer.Start();
}
public void TimerEvent(object source, ElapsedEventArgs e)
{
timer.Stop();
findFile();
}
private void findFile()
{
string fName = "";
this.Dispatcher.Invoke(() => {
fName = inputFileName.Text;
});
var fType = ".txt";
var fileName = fName.Trim() + fType;
var file = Directory.GetFiles(@"C:\TestFolder\", fileName, SearchOption.AllDirectories).FirstOrDefault();
if (file == null) {
Console.WriteLine("File not found");
}
else {
Console.WriteLine("Found:" + file);
}
}
}
}
【问题讨论】:
-
方法错误,Directory.EnumerateFiles() 很容易停止。只需
break退出 foreach 循环即可。