我正在構建一個WPF程序,它執行一些圖像採集,處理和使用Image對象進行顯示。目前,我從C++中召集新的線程來完成採集和處理,然後通過回調來更新圖像。從WPF中的單獨線程更新Image.source
看來,當我在回調中訪問Image.source時,它會拋出一個「無法訪問此對象,因爲另一個線程擁有它」的異常。我試圖在STA線程中構造Image並訪問Image.source,但發生同樣的異常。我應該如何處理這個問題?
非常感謝。
我正在構建一個WPF程序,它執行一些圖像採集,處理和使用Image對象進行顯示。目前,我從C++中召集新的線程來完成採集和處理,然後通過回調來更新圖像。從WPF中的單獨線程更新Image.source
看來,當我在回調中訪問Image.source時,它會拋出一個「無法訪問此對象,因爲另一個線程擁有它」的異常。我試圖在STA線程中構造Image並訪問Image.source,但發生同樣的異常。我應該如何處理這個問題?
非常感謝。
如果創建一個後臺線程的ImageSource的,你可以調用它的Freeze
方法,使其跨線程訪問。
你可以這樣設置在UI線程Image控件的Source
財產,通過調用Dispacher.Invoke
:
var bitmap = new BitmapImage();
bitmap.BeginInit();
...
bitmap.EndInit();
bitmap.Freeze();
image.Source.Dispatcher.Invoke(() => image.Source = bitmap);
if (InvokeRequired)
{
this.Invoke(new Action<source>(ImageObject), new object[] {value});
return;
}
OR
Invoke((MethodInvoker)delegate {
MainForm.UpdateImageSource(source);
});
OR
Call Image.source = object
對不起,什麼是「呼叫」?它在C#中看起來不像一個有效的關鍵字。 –
這是最後的手段,我很抱歉,這是一個vb.net關鍵字,嘗試在它上面的選項 –
idk什麼對象和數據youre處理,因爲你沒有發佈任何代碼。所以我給了源和圖像對象作爲想法,填入適當的數據 –
參見[這個答案](https://stackoverflow.com/a/33917169),特別是,在標有重複的 –