Ich verwende Directory.GetFiles()
, um Dateien in einem Verzeichnis mit mehreren Ordnern zu suchen, und einige dieser Ordner sind zu groß, so dass die Suche bis zu 60 Sekunden dauern kann. Im folgenden Code beginnt eine Suche eine Sekunde nachdem der Benutzer mit der Eingabe aufgehört hat. Dies funktioniert sehr gut, wenn der Benutzer den Dateinamen eingibt und während der Eingabe nicht pausiert, aber wenn er in der Mitte des Wortes pausiert, beginnt die Suche und wird nicht aufhören, bis es fertig ist, auch wenn er/sie wieder zu tippen beginnt.Gibt es eine Möglichkeit, eine Directory.GetFiles Suche zu stoppen
Was ich tun möchte, ist Suchen zu stoppen, während der Benutzer tippt, möglicherweise in der Methode inputFileName_TextChanged.
Gibt es eine Möglichkeit, eine Suche zu stoppen, die bereits gestartet wurde, wenn Directory.GetFiles
verwendet wird?
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);
}
}
}
}
Falsche Methode, Directory.EnumerateFiles() ist sehr einfach zu stoppen. Einfach aus der foreach-Schleife ausbrechen. –
Zunächst einmal vielen Dank für Ihren Vorschlag. Wenn ich das richtig verstehe, sollte ich '.FirstOrDefault()' entfernen, mein Suchmuster in * .txt * ändern, damit ich alle Dateien mit der Erweiterung .txt bekommen kann, dann benutze 'foreach', um die Ergebnisse zu durchlaufen. Wenn das richtig ist, was wäre der Vorteil der Verwendung von 'Directory.EnumerateFiles()' anstelle von 'Directory.GetFile()', wenn beide eine Liste von Pfaden zurückgeben, gibt eins 'IEnumerable 'zurück und das andere ein Array von 'string []' aber am Ende denke ich, dass beide gestoppt werden könnten. Was ist der Unterschied? –
@ Peter Duniho hat meine Frage schon beantwortet, danke. –