[英]Process image on non-ui thread
我目前有一個WriteableBitmap ,我想在非 UI 線程上處理它。
我基本上想重用作為我的圖像控件源的圖像並在 Task.Run 中處理它。
WriteableBitmap bitmap;
Task.Run(() =>
{
// Process the bitmap here
});
不幸的是,我收到以下異常,因為它在 UI 線程上被阻止
調用線程無法訪問此對象,因為其他線程擁有它。
注意 - 我不想在 UI 線程上處理代碼!
有人能幫助我嗎?
像WriteableBitmap這樣的對象必須在它們創建的線程上使用。 所以你必須在另一個線程上分配它。
如果您希望在處理工作線程后在UI上使用已處理的圖像,則應執行以下操作之一:
WriteableBitmap
是DispatcherObject ,只有創建Dispatcher的線程才可以直接訪問DispatcherObject 。 要從創建DispatcherObject的線程以外的線程訪問DispatcherObject ,我們需要在與DispatcherObject關聯的Dispatcher上調用Invoke或BeginInvoke。 委托將在該線程上執行,因此渲染線程將阻塞。
如果您想使用原始像素數據, WriteableBitmap
將是一個不錯的選擇。 我們可以使用WriteableBitmap的CopyPixels方法將像素數據加載到int數組中,在我們修改int array
的數據后,我們可以使用WritePixels方法更新WriteableBitmap
的像素。 所以,也許你可以嘗試在后台線程中操作int數組。
創建要寫入Task中WriteableBitmap的像素數據(數組),並在GUI線程上執行Write。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.