我有一个小的WPF
应用程序需要枚举指定目录中的所有文件,并检查某个字符串是否存在于其中。这是搜索方法:从线程得到错误的结果
private void btnSearch_Click_1(object sender, RoutedEventArgs e)
{
Thread t = new Thread(()=>search(@"c:\t", "url", true));
t.Start();
}
private void search(string path, string textToSearch, bool ignoreCase)
{
foreach (string currentFile in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories))
{
int lineNumber = 0;
foreach (string line in File.ReadLines(currentFile))
{
lineNumber++;
if (line.Contains(textToSearch))
{
lbFiles.Dispatcher.BeginInvoke((Action)(() =>
{
//add the file name and the line number to a ListBox
lbFiles.Items.Add(currentFile + " " + lineNumber);
}));
}
}
}
}
我的问题是,如果指定的字符串是发现比文件中出现多次,行号将是后者的所有事件。对于具有以下行的文本文件:
ABCD
EFG
网址
hijk123
网址
的listbox
看起来就像这样:
当用断点逐句通过代码时,我可以看到,在退出搜索方法之后,它立即“跳回”BeginInvoke
声明。
请指教。
谢谢
这是打算的行为! 'BeginInvoke'创建一个异步操作并立即返回。 – 2013-03-14 13:59:19