我有以下代码,它创建一个临时文件夹,并使用 FileSystemWatcher 轮询添加到 Location 属性上的文件夹中的文件,并将它们添加到列表中:Pastebin 上的 Scratchdisk.cs http://pastebin.com/3zcDnh0b。这个想法是创建一个 Scratchdisk 对象,并让 FFmpeg 将视频帧提取到其中,FileSystemWatcher 在 FFmpeg 创建这些文件时构建这些文件的列表,并且该列表作为我的 UI 绑定到的 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 写入文件列表有关。
有什么帮助吗?
Thanks!
我访问它的方式是这样的。它获取 UI 线程的 Dispatcher
System.Windows.Application.Current.Dispatcher.Invoke(
(Action)(() =>
{
//Access the UI from here
}));
这里要注意的主要事情是,我所拥有的内容和您在评论中列出的内容之间,无论您是否在后台代码、视图模型、服务类中,无论您在何处,我的都会工作。并非所有物品都有Dispatcher
对他们如此this.Dispatcher
并不总是有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)