Я работаю над проектом, где я должен наблюдать за каталогом. Файлы будут развернуты в каталоге одновременно. Это означает, что может быть 7000 файлов, которые будут перемещены в каталог за один раз. Я использую FileSystemWatcher для запуска потока, если новый файл не добавлен в каталог. Если я перемещаю небольшое количество файлов (1-150 файлов, по 20 КБ каждый), начинается правильное количество потоков. Для каждого файла одна нить. Как только я вставляю большее количество этих файлов, это показывает, что было запущено больше потоков, чем в каталоге. Как видите, я распечатываю «тест» и счетчик для каждого запущенного потока. В конце счетчик является большим числом, чем количество вставленных файлов. Чем больше файлов я вставляю, тем больше разница между счетчиком и вставленными файлами. Надеюсь, вы скажете мне, что я делаю не так.
public static void Main(string[] args)
{
Queue queue = new Queue();
queue.Watch();
while (true)
{
}
}
public void Watch()
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "directorypath\\";
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.*";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}
public void OnChanged(object source, FileSystemEventArgs e)
{
WaitForFile(e.FullPath);
thread = new Thread(new ThreadStart(this.start));
thread.Start();
thread.Join();
}
private static void WaitForFile(string fullPath)
{
while (true)
{
try
{
using (StreamReader stream = new StreamReader(fullPath))
{
stream.Close();
break;
}
}
catch
{
Thread.Sleep(1000);
}
}
}
public void start()
{
Console.WriteLine("test" +counter);
counter++;
}