簡體   English   中英

如何在另一個線程中打開打印對話框

[英]How can open print dialog box in another thread

如果我只是打電話

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

它工作正常,但如果我在另一個線程中使用這個 function 那么它會顯示錯誤

{“外部組件引發的異常。”}

在啟動線程之前,您必須在線程上調用 SetApartmentState 以將其切換到 STA。 如果線程是線程池線程或者您使用的是 BackgroundWorker,則這是不可能的。

否則這是一個壞主意,對話框將沒有父級,並且可能會消失在另一個 window 后面。 它也不會是模態的。 到目前為止,最好的解決方案是通過在主線程上運行的代碼來顯示此對話框。 實際的打印仍然可以在工作線程上進行。 根據需要使用 Control.Invoke()。

外部線程需要在主 UI 上調用請求。 您不能直接從 Thread 調用來進行 UI 更改。

在新線程中創建 PrintDialog 的 object 然后調用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM