2011-06-21 11 views
1

私は最後にイベントを発生させるメソッド(CreateDocument)を持つクラスを持っています。イベント引数にはFixedDocumentが含まれています。私のメイン・ウィンドウのコードでは、私は次のようにDocumentViewerののドキュメントを設定してみてください:「別のスレッドがそれを所有しているので、呼び出し元のスレッドがこのオブジェクトにアクセスすることはできません」私が受け取る別のスレッドからDocumentViewer.Documentを設定しますか?

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

FixedDocument要素には、スレッドアフィニティもあります。したがって、documentViewer1とは別のスレッドで作成する場合は、その例外が発生します。

基本的には、DispatcherObjectから派生したものはすべてスレッドアフィニティを持っています。 FixedDocumentは、ビューアコントロールと同様に、DispatcherObjectから派生しています。

関連する問題