如何在另一个线程中打开打印对话框



如果我只是调用

If PrintDialog1.ShowDialog = DialogResult.OK Then
                                        PrintDocument1.Print()
                                    End If

工作正常,但如果我在另一个线程中使用这个函数,它会显示错误

{"外部组件抛出异常。"}

你必须在线程上调用SetApartmentState以在启动线程之前将其切换为STA 。如果线程是一个线程池线程或者你正在使用BackgroundWorker,这是不可能的。

这是一个坏主意,否则对话框将没有父窗口,并且很可能消失在另一个窗口后面。它也不会起模态作用。到目前为止,最好的解决方案是通过运行在主线程上的代码来显示这个对话框。实际的打印仍然可以在工作线程上进行。根据需要使用Control.Invoke()

外部线程需要在主UI上调用请求。你不能直接从线程调用来修改UI

在新线程中创建PrintDialog对象&然后调用

Dim myPDia As New PrintDialog
 If myPDia.ShowDialog() = Windows.Forms.DialogResult.OK Then
    PrintDocument1.Print()
 End If

相关内容

  • 没有找到相关文章

最新更新