2017-06-17 95 views
-2

類似但不同的對這個問題How do you implement an async action delegate method?WPF dispatcher.invokeasync Func鍵<T,T,TResult>

嗨, 我有兩個參數並返回結果, 在計算它會調用awaitable功能 的參數結果的方法該方法只能在另一個線程上訪問,所以我使用了dispatcher.CheckAccess,dispatcher.Invoke或dispatcher.InvokeAsync。 迄今爲止獲得的最佳結果是構建和運行的東西,但即使調用調用被調用,該函數也不會受到影響。

我在引用的線程中發現了由於命名T結果而引起混淆的例子,而我認爲T是一個in參數。

我的功能看起來是這樣的:

private async Task<TResult>> fn(object arg1, object arg2){return await x(arg1,arg2);} 

調度代碼看起來是這樣的:

if (dispatcher.CheckAccess()) 
result= await fn(a,b); 
else 
result=dispatcher.InvokeAsync<TResult>(fn(a,b)); // this is incorrect syntax 

希望斯蒂芬·克利裏能救我:-)我找不到像這樣的例子C#食譜中的併發。大概我看着這種錯誤的方式?

感謝 馬丁

+1

如果你知道你的'InvokeAsync'的調用不正確,爲什麼不能去MSDN,知道正確的語法? 1)我發現'InvokeAsync'沒有超過'Func <..., ...>'作爲一個參數; 2)在C#中,不能將方法調用作爲參數傳遞。可能你想使用'InvokeAsync(()=> fn(a,b))' – Maxim

+0

雖然[mm8's answer](https://stackoverflow.com/a/44631088/263693)會讓你編譯代碼,但我通常推薦構建代碼,以便後臺操作不需要UI層的存在。例如,首先獲得'TResult',然後*然後*開始後臺操作。 –

回答

0

好,用新鮮的頭腦今天上午看這個。我回到了那個跑了的球,但沒有產生結果。原來與調度程序相關的線程是處於等待狀態連接狀態的後臺線程。我需要的對象是一張圖片。通過凍結圖像,我發現我根本不必擔心線程問題 - 沒有可用的調度程序。 希望這可以幫助別人。 馬丁

1

InvokeAsync方法接受一個ActionFunc<T>,你可以等待:

await Dispatcher.InvokeAsync(async() => await fn(a, b));