我的程序中有兩個圖像,我有一個函數來比較兩個BitmapSources,問題是我將一個ImageSource轉換爲BitmapSource並將其分配給一個變量,並將其發送給任務內部的函數(因爲函數相當慢,我更喜歡使用任務,然後在完成時更新用戶),它給我一個錯誤,即任務不能使用此變量,因爲另一個線程擁有它...請幫助我解決它。從DispatcherObject衍生發送BitmapSource任務計算-wpf c#
private async void btnAnalyze_Click(object sender, RoutedEventArgs e)
{
if (AnalyzeImage?.Status == TaskStatus.Running) await AnalyzeImage;
var baseSource = (BitmapSource)imgBase.Source;
var newSource = (BitmapSource)imgNew.Source;
if (baseSource?.CompareSizeTo(newSource) == false)
{
ShowStatus("Images are different in size or at least one of them is null");
return;
}
btnAnalyze.IsEnabled = false;
ShowStatus();
try
{
AnalyzeImage = Task<BitmapSource>.Factory.StartNew(() => baseSource?.ConvertToBitmap().CompareTo(newSource?.ConvertToBitmap()).BitmapToImageSource());
InvokeA(() => waitingPanel.Visibility = Visibility.Visible);
await AnalyzeImage;
imgNew.Source = AnalyzeImage.Result;
}
catch (Exception ex) { Notify("Error in btnAnalyzeClick", ex, true); }
finally { InvokeA(() => waitingPanel.Visibility = Visibility.Hidden); }
}
表現出一定的代碼好嗎? – Slashy
我更新了,如果你想要別的東西,具體說什麼...... @Slashy – David47
ConvertToBitmap(),BitmapToImageSource() - 是那些擴展方法? – alexm