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

发布于 2024-11-29 22:34:09 字数 263 浏览 1 评论 0原文

如果我只是简单地调用

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

它的工作正常,但如果我在另一个线程中使用此函数,那么它将显示错误

{“外部组件引发了异常。”}

If i simply call

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

its working fine but if i use this function in another thread then it will shows error

{"External component has thrown an exception."}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

<逆流佳人身旁 2024-12-06 22:34:10

在新线程中创建 PrintDialog 对象然后打电话

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

Create object of PrintDialog in new thread & then call

Dim myPDia As New PrintDialog
 If myPDia.ShowDialog() = Windows.Forms.DialogResult.OK Then
    PrintDocument1.Print()
 End If
小瓶盖 2024-12-06 22:34:09

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

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

You have to call SetApartmentState on the thread to switch it to STA before you start the thread. This is not possible if the thread is a threadpool thread or if you are using BackgroundWorker.

This is otherwise a bad idea, the dialog won't have a parent and is likely to disappear behind another window. Nor will it act modal. By far the best solution is to display this dialog by code that runs on the main thread. The actual printing can still take place on the worker thread. Use Control.Invoke() as required.

苍暮颜 2024-12-06 22:34:09

外部线程需要在主 UI 上调用请求。您无法直接从线程进行调用来更改 UI。

External threads need to Invoke requests on main UI. You can't directly make a call from a Thread to make UI changes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文