I am guessing you want to keep the code that handles file events on the watcher and on startup the same code used in two places.
Guessing you scan multiple source directories of files recursively.
Does C# have a thread safe queue object? You could create a pool of worker threads and the file watcher can enqueue events
You could have threads that scan file sources (one per source) which enqueue file names to worker threads which do the work. You could have a queue per source thread and worker thread.
The problem with the file watcher code is that I don't know what context that event runs in, so you would either have to enqueue events from the main thread context to one of the worker thread queues.