我有這段代碼(感謝那些一直在幫助到目前爲止)爲什麼枚舉文件不止一次返回相同的文件?
它搜索一個目錄和所有子目錄尋找一個文件名。
Files.Clear(); //BindingList<FileInfo> Datasource for a datagridview
Task.Factory.StartNew(() =>
{
DirectoryInfo dir = new DirectoryInfo(MainFolder);
foreach(var file in dir.EnumerateFiles("*" + textBox1.Text + "*.doc?", SearchOption.AllDirectories).Take(200))
{
this.BeginInvoke(new Action(() =>
{
Files.Add(file);
}));
}
});
的問題是,如果我設置textBox1.text
的東西,我知道只有1中,它增加了它Files
4倍。我試圖指出它不是在我如何顯示它。
我比較了4個對象,他們是相同的。當我稍微打開搜索標準並得到5個結果時,其中一些是1,一些是雙倍的三倍。所以有5個獨特的結果,但總共有10-12個。
我在做什麼錯?
你可以更清楚一點,我沒有寫出大部分上面的代碼,而當我玩它時,它變得更有意義,你能告訴我文件變量在哪裏變異,導致我我以爲我正在使用invoke。 –
BeginInvoke使用文件枚舉代碼同時調用您的lambda。一旦下一次循環迭代開始,變量文件就包含下一個文件。但是你的lambda期待舊的。一種不同的解決方案是首先將文件複製到本地變量中。 – usr
使用調用,而不是BeginInvoke。 – usr