Это потому, что FileSystemWatcher вызывает свои события в потоке потоков. Что является естественным способом, эти события файловой системы происходят асинхронно. Вы не можете напрямую получить доступ к любым компонентам пользовательского интерфейса в обработчике событий, они не являются поточно-ориентированными. InvalidOperationException существует, чтобы напомнить вам, что вы не можете.
Исправление требует добавления одной строки кода:
fsw.SynchronizingObject = this;
Что заставляет FileSystemWatcher маршалировать вызов обработчика событий для потока, который создал форму, потока пользовательского интерфейса. Это не обязательно лучшее решение, поскольку маршалинг вызова требует много накладных расходов. Но с этим решением у вас все будет в порядке, поскольку у вас есть для маршалинга для каждого события в любом случае с кодом, который у вас есть сейчас.