То, что вы хотите, невозможно.События FileSystemWatcher
обрабатываются другим потоком, чем поток страницы.Чтобы проиллюстрировать это:
Page thread: |-Page_Load----...----Page_Unload-|
|-Start FSW
FSW thread : |-----------------------------...--------FSW.OnChanged(...)---|
Где-то внутри Page_Load
запускается FileSystemWatcher
.Жизненный цикл страницы заканчивается Page_UnLoad
, и поток, запустивший жизненный цикл страницы, возвращается в пул потоков.И что еще более важно, страница визуализируется и завершается, и ничто больше не может быть изменено.
В какой-то более поздний момент времени, возможно, через одну секунду, может быть, через десять минут FileSystemWatcher
генерирует событие.Страница была обработана браузером очень давно, так что, по вашему мнению, должно произойти, когда вы звоните Response.Redirect
?Поскольку ответ уже был отправлен в браузер, ничего не произойдет.
Кроме того, это в конечном итоге приведет к проблемам с памятью.Каждый раз, когда вы запрашиваете эту страницу, создается новый FileSystemWatcher
.Наблюдатель должен поддерживать ссылку на страницу, потому что он должен вызывать обработчик события, когда происходит событие.Поэтому и страница, и наблюдатель не могут быть собраны мусором.Поэтому каждый раз, когда вы запрашиваете эту страницу, вы создаете экземпляр страницы и средства наблюдения, которые занимают небольшой объем памяти, который никогда не восстанавливается.