Как сделать, чтобы FileSystemWatcher распараллелил выполненный навсегда?

Вы можете сначала отфильтровать myList в два списка в зависимости от того, имеет ли каждый элемент свойство amount:

const includesAmount = myList.filter(item => item.hasOwnProperty('amount'));
const excludesAmount = myList.filter(item => !item.hasOwnProperty('amount'));
includesAmount.sort(...)

const finalArray = [...includesAmount, ...excludesAmount];

Это делает два прохода через myList, но вы можете сделать это за один пройти итерацией по myList и перенести каждый элемент в соответствующий массив.

7
задан tshepang 11 May 2014 в 19:35
поделиться

5 ответов

Если это работает на сервере, сервис походит на хорошую ставку.

Если Вы хотите что-то немного более интерактивное, у меня есть небольшое приложение, которое живет в моем системном лотке, чтобы показать мне, когда что-то происходит в нашей папке Issues. Это использует Приложение. Выполненный () метод для хранения себя обходящийся без помощи потребности в цикле, т.е.

class MainEntryClass
{
    static void Main(string[] args)
    {
        FolderAlerter fa = new FolderAlerter(); 
        Application.Run();
    }
}

Затем я создал свой FileSystemWatcher в FolderAlerter.

9
ответ дан 6 December 2019 в 21:20
поделиться

В основном FileSystemWatcher использует некоторые встроенные рычаги для подписки на изменения и просто заставляет ОС звонить делегатам, когда изменение происходит. Таким образом, все, что необходимо сделать, мешают основному потоку выйти, он ничего не должен на самом деле делать; К тому времени, когда Вы добираетесь до той строки, основная часть Вашей программы закончена, она сделала то, что она должна была сделать.

Простой способ сделать, что Вы хотите, состоит в том, чтобы внести это изменение в образец из MSDN;

//while (Console.Read() != 'q') ;
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);

Это поместит Ваш основной поток для сна навсегда, но все еще позволит делегатам запускать и отвечать на изменения в каталоге. Обратите внимание, что это будет продолжать бежать через несколько изменений (точно так же, как образец MSDN).

Обратите внимание, что, "в то время как" в MSDN образец действительно не делает многого; Вы могли заменить ту строку просто "Консолью. Читайте ()", который затем заставил бы любой ключ выйти из приложения. Это - просто строка, чтобы мешать основному потоку выйти так, чтобы это было все еще вокруг, когда уведомления о событии входят.

Однако с помощью Сна (Тайм-аут. Бог), оставляет Ваше приложение в состоянии, где оно не может быть легко остановлено пользователем, кроме путем уничтожения приложения. Если Вы пишете это, поскольку консольное приложение, почему бы не придерживаться с "нажимают Q для выхода"? Если Вы решите записать это как услуга вместо этого, то это, вероятно, будет в порядке, пока Вы обрабатываете события завершения работы/перезапуска и т.д.

2
ответ дан 6 December 2019 в 21:20
поделиться

Чтобы сделать это, Вы, вероятно, хотите создать a ManualResetEvent в состоянии сброса и имеют Ваш основной поток WaitOne() на нем. Для завершения некоторый другой обратный вызов может просто Set() событие, которое вызовет WaitOne() возвратиться.

1
ответ дан 6 December 2019 в 21:20
поделиться

Sysinternals (теперь принадлежавший Microsoft) имеет FileMon, который даст Вам, в чем Вы нуждаетесь с источником.

Заключение в кавычки от сайта

основа FileMon находится в драйвере виртуального устройства, Filevxd.vxd. Это динамично загружается, и в его инициализации это устанавливает фильтр файловой системы через услуги VxD, IFSMGR_InstallFileSystemApiHook, для вставки себя на цепочку вызовов всех запросов к файловой системе.

Двоичные файлы и источники могут быть найдены здесь: http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx

0
ответ дан 6 December 2019 в 21:20
поделиться

Вы могли использовать Поток. Сон для предотвращения пустого цикла. Однако в случае, например, системная перезагрузка служба Windows будет перезапущена автоматически. Другой подход, в зависимости от того, как остальная часть программы/системы проектируется, должен использовать Windows Scheduler для выполнения логики опроса в отдельном .exe файле.

При поиске устойчивого/эластичного решения или служба Windows или подход Windows Scheduler-based кажутся предпочтительными.

0
ответ дан 6 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: