从后台线程编程地在UI线程中创建UI,并将其再次复制到后台线程

本文关键字:线程 后台 UI 复制 创建 编程 | 更新日期: 2023-09-27 18:19:08

我是这样开始一个新线程的:

  private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            System.Threading.Thread myThread = new System.Threading.Thread(prePrint);
            myThread.Start();                    
        }

预打印函数是这样的:

 private void prePrint()
        {
            for (int j = 0; j < DataHandle.Recipe.Count; j++)
            {
                // create print dialog
                // create print ticket.
                FlowDocument fd = new FlowDocument();
                // assign the createFD(int j) to fd here. << HERE IS THE MAIN PROBLEM
                DocumentPaginator sd = ((IDocumentPaginatorSource)fd).DocumentPaginator;
                 // print the flow document here
            }
         }

  private FlowDocument createFD(int j) {
                                          FlowDocument fd = new FlowDocument();
                                          return fd;
                                        }

我想在UI线程中创建流程文档,并将其复制到后台线程,最后打印它(如果可能的话)。

我对这项技术很陌生。请帮我找一个更好的方法。

从后台线程编程地在UI线程中创建UI,并将其再次复制到后台线程

嗯,基本的技巧是使用FlowDocumentDispatcher并用BeginInvoke()调用函数。顺便说一下,文档只能在UI线程上创建,并在创建它的线程上使用,但是如果文档结构首先构造,然后保存到内存XML中,则可以进行优化。对它的性能有一点怀疑,你应该检查一下。

看这里,一个很好的例子:http://chrismylonas.blogspot.com/2007/12/flowdocument-and-multiple-threads.html