我有一个带有方法(CreateDocument)的类,它在最后触发一个事件。事件args包含一个FixedDocument。在我的MainWindow代码中,我尝试将DocumentViewer的文档设置为:
void lpage_DocCreated(object sender, LabelDocumentEventArgs e)
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
new DispatcherOperationCallback(delegate
{
FixedDocument fd = e.doc;
documentViewer1.Document = fd;
documentViewer1.FitToWidth();
return null;
}), null);
}
我收到“调用线程无法访问此对象,因为另一个线程拥有它。”在线documentViewer1.Document = fd;
我可以在另一个事件处理程序中更新进度条,该处理程序在工作时触发相同的方法:
Int32 progress = Int32.Parse(sender.ToString());
progBar.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal,
new DispatcherOperationCallback(delegate
{
progBar.Value = progress;
return null;
}), null);
当我设置进度条值时,当我基本上做同样类型的事情时,我无法弄清楚为什么我无法设置文档。
答案 0 :(得分:0)
FixedDocument元素也具有线程关联性。因此,如果您在一个单独的线程中创建它而不是documentViewer1,那么您将获得该异常。
基本上,任何派生自DispatcherObject的东西都具有线程关联性。 FixedDocument派生自DispatcherObject,就像查看器控件一样。