2017-08-26 55 views
-1

我正在構建一個WPF程序,它執行一些圖像採集,處理和使用Image對象進行顯示。目前,我從C++中召集新的線程來完成採集和處理,然後通過回調來更新圖像。從WPF中的單獨線程更新Image.source

看來,當我在回調中訪問Image.source時,它會拋出一個「無法訪問此對象,因爲另一個線程擁有它」的異常。我試圖在STA線程中構造Image並訪問Image.source,但發生同樣的異常。我應該如何處理這個問題?

非常感謝。

+0

參見[這個答案](https://stackoverflow.com/a/33917169),特別是,在標有重複的 –

回答

0

如果創建一個後臺線程的ImageSource的,你可以調用它的Freeze方法,使其跨線程訪問。

你可以這樣設置在UI線程Image控件的Source財產,通過調用Dispacher.Invoke

var bitmap = new BitmapImage(); 
bitmap.BeginInit(); 
... 
bitmap.EndInit(); 
bitmap.Freeze(); 

image.Source.Dispatcher.Invoke(() => image.Source = bitmap); 
-1
if (InvokeRequired) 
{ 
    this.Invoke(new Action<source>(ImageObject), new object[] {value}); 
    return; 
} 

OR

Invoke((MethodInvoker)delegate { 
MainForm.UpdateImageSource(source); 
}); 

OR

Call Image.source = object

+0

對不起,什麼是「呼叫」?它在C#中看起來不像一個有效的關鍵字。 –

+0

這是最後的手段,我很抱歉,這是一個vb.net關鍵字,嘗試在它上面的選項 –

+0

idk什麼對象和數據youre處理,因爲你沒有發佈任何代碼。所以我給了源和圖像對象作爲想法,填入適當的數據 –