从另一个线程设置DocumentViewer.Document?

时间:2011-06-21 14:46:35

标签: wpf-controls

我有一个带有方法(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);

当我设置进度条值时,当我基本上做同样类型的事情时,我无法弄清楚为什么我无法设置文档。

1 个答案:

答案 0 :(得分:0)

FixedDocument元素也具有线程关联性。因此,如果您在一个单独的线程中创建它而不是documentViewer1,那么您将获得该异常。

基本上,任何派生自DispatcherObject的东西都具有线程关联性。 FixedDocument派生自DispatcherObject,就像查看器控件一样。