У меня есть следующий код, который создает временную папку и использует FileSystemWatcher для опроса файлов, добавленных в папку в свойстве Location, и добавляет их в список: Scratchdisk.cs на Pastebin. Идея состоит в том, чтобы создать объект Scratchdisk и заставить FFmpeg извлекать в него видеокадры, FileSystemWatcher создает список этих файлов по мере их создания FFmpeg, и этот список представляется как DependencyObject, к которому привязывается мой пользовательский интерфейс.
Я привязываюсь к объекту Scratchdisk следующим образом:
<ItemsControl ItemsSource="{Binding Source=ThumbnailScratchdisk, Path=FileList}">
...
</ItemsControl>
Однако при фактическом создании объекта я получаю следующее исключение:
A first chance exception of type 'System.InvalidOperationException' occurred in WindowsBase.dll
Additional information: The calling thread cannot access this object because a different thread owns it.
в строке 28 get { return (List<string>)GetValue(FileListProperty); }
Я думаю, что мне нужен Dispatcher.Invoke где-то, но я понятия не имею, где, я не знаю, где создается второй поток. Я предполагаю, что это как-то связано с записью FileSystemWatcher в список файлов.
Любая помощь?
Спасибо!
FileSystemWatcher
вызывает события из другого потока. Попробуйте заменитьWatcher_Created
на что-то вродеthis.Dispatcher.Invoke(new Action(() => AddFileReference(e.FullPath)))
. - person dkozl   schedule 23.11.2014