2013-05-20 64 views
0

我有一個查詢一堆WMI,註冊表和其他數據的程序。然後將數據格式化爲各種RichTextBoxes,突出顯示遠程計算機上掃描的數據中的錯誤。使用BackgroundWorker的RichTextBox數據更新主UI

我想將掃描的不同部分分爲不同的線程,因此只需幾分之一的時間即可完成。它大部分工作,但我不知道如何從BackgroundWorker返回RichTextBox。它迫使我傳遞一個對象,並且該對象只能返回純文本(AFAIK)。它也告訴我我無法從線程更新RichTextBox。

當我有BackgroundWorker查詢並格式化RichTextBox後,如何獲取顯示在主UI上的數據?

+0

BackgroundWorker需要哪種類型的信息?文字,顏色,字體等?如果您需要所有這些功能,請創建自己的類來存儲數據,並將其作爲BackgroundWorker的DoWork函數的結果返回。 – gunr2171

回答

1

您的BackgroundWorkerDoWork部分應將要顯示在RichTextBox控件中的文本指定爲e.Result。這不一定是純文本... e.Result是一個object。您不想觸摸BackgroundWorker的這一部分中的任何UI控件......您處於後臺線程中,而不是主UI線程。

接下來執行RunWorkerCompleted部分。您在DoWork部分分配的對象在e.Result中可用。您現在回到主UI線程中,因此將對象轉換爲您需要的任何類型,並將其分配給您的RichTextBox控件。

閱讀Threading in C#: BackgroundWorker by Joseph Albahari瞭解更多信息。

+0

我能夠將結果作爲對象返回,它只是以純文本形式出現。我會做一些關於對象鑄造的文章,謝謝。 – Zatek

相關問題