1

是否可以在不阻塞UI線程的情況下在Silverlight中打印?Silverlight 5:在UI線程之外打印?

我必須打印很多頁面,因此我的UI會凍結一段時間。我想打印在後臺線程而不是(如果可能,更新進度欄),但不知道如何。

我打過電話我PrintDocumentPrint()方法BackgroundWorkerDoWork()方法裏面,但是這給了我一個UnauthorizedAccessException "Invalid cross-thread access"

看來,即使啓動PrintDocument是不可能在UI線程之外: PrintDocument pd = new PrintDocument();BackgroundWorker.DoWork()引發相同的異常。

我發現很多帖子,人們說打印必須在UI線程上發生,但沒有這方面的文檔。我是新來的多線程,所以任何指針正確的方向將不勝感激。

回答

1

我有這個問題,並遇到了這個問題,不幸沒有我希望的答案。但我認爲對於遇到這個問題的其他人來說,這至少可以說明一些問題。

我在Silverlight中打印後是this article,它像UI線程上常規打印的魅力,但實際上試圖在單獨的線程上打印我不認爲這是可能的。我切換出的代碼的最後一行中的示例

printDocument.Print("SLPrintDemo document"); 

用替代一個,看它是否會工作

new Thread(() => printDocument.Print("SLPrintDemo document")).Start(); 

要查看打印作業本身將在一個單獨的線程產卵。但是,雖然代碼編譯並運行良好,但文檔不會打印。原因似乎是,一旦打印命令被觸發,它就會啓動打印選項對話框來選擇打印機和其他選項等。在這一點上它不再在UI線程上,所以沒有任何反應(沒有例外,所以我'假設他們被吞噬了某處)

所以據我現在可以告訴,沒有辦法在Silverlight中打印不在UI線程中。

0

使用Dispatcher更新您的用戶界面。例如:

Dispatcher.BeginInvoke(() => 
    { 
     ProgressBar.Value = 100; 
    }); 
+0

好的,我會用它從UI線程外部更新UI。但是如何讓打印在第一個地方在另一個線程中運行?打印能否在UI線程之外運行? – Phasma

+0

對不起,我猜你不能。 '調度員'也不會幫忙。有類似的問題http://stackoverflow.com/questions/4563831/how-can-i-display-a-busyindicator-during-printing-in-silverlight-4。 – Zabavsky

相關問題