lock
не приводит к изменению используемого потока.Я просто запрещаю нескольким потокам одновременно обращаться к коду внутри этого блока.
Причина, по которой вы получаете несколько потоков, заключается в том, что FileSystemWatcher
вызывает событие Changed
в потоке потоков.
Если вы хотите, чтобы DispatchResult
встречалось в одном потоке, вам нужно использовать некоторую форму SynchronizationContext
, чтобы вернуть результат обратно в этот поток.В приложении с пользовательским интерфейсом это обычно делается, например, с помощью Control.Invoke
или Dispatcher.Invoke
.
На заметку о том, что лучше не использовать lock(this)
, а вместо этого сделать закрытый объект,используется только для вашей блокировки.В противном случае другой объект может заблокировать ваш экземпляр и вызвать всевозможные проблемы.