2010-02-05 73 views
0

我在使用WPF應用程序中的backgroundworker時遇到了一些問題。這裏的情況:跨線程訪問wpf中的非ui對象

我想做兩件事情。首先掃描多個圖像,然後在掃描的圖像上使用條形碼識別。我將檢索掃描圖像作爲BitmapSource對象的列表,這些應該可供我的Backgroundworker線程使用。

經過一些Google搜索後,似乎大多數解決方案都是專門針對主線程上的UI元素進行通信,因爲我找到的解決方案都不適合我。我試過使用代表和調度員,但無濟於事。

我需要BitmapSources與他們一起創建位圖,這是條形碼識別的輸入。

謝謝,

凱文

+0

那麼你面臨的實際問題是什麼?你可以發佈一些代碼嗎? – hackerhasid 2010-02-05 15:09:22

+0

BackgroundWorker線程可以訪問任何類成員。也許你應該發佈一些代碼來展示什麼不起作用的例子。 – scottm 2010-02-05 15:24:04

回答

0

在WPF中,所有DispatcherObjects(不僅UI元素)只能從創建它們的線程訪問。 BitmapSourceDispatcherObject繼承(間接),所以它遵循此規則。但是,它也繼承自FreezableFreezable對象可以從其他線程訪問,如果它們被凍結

因此,您的BitmapSource初始化後,您可以調用Freeze,它可以從其他線程訪問。

+0

問題解決了,謝謝! – kwe 2010-02-05 16:08:56

+0

其他UI元素呢?它看起來像'TextBlock'這樣的元素不會從'DispatcherObject'繼承。 :( – 2011-03-03 08:48:14

+0

@conqenator,是的,它(間接)...檢查出[文檔](http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.aspx)(在WPF,不在Silverlight中) – 2011-03-03 08:53:31