wpf dispatcher.invokeasync Func <t,t,tresult>

时间:2017-06-17 13:24:15

标签: c# wpf multithreading

与此问题相似但不同How do you implement an async action delegate method?

您好, 我有一个方法,它接受两个参数并返回一个结果, 在计算结果时,它称之为等待功能 该方法的参数只能在另一个线程上访问,所以我使用的是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

希望Stephen Cleary能救我:-)我在C#Cookbook的Concurrency中找不到这样的例子。可能我看错了吗?

由于 马丁

2 个答案:

答案 0 :(得分:1)

InvokeAsync方法接受您可能需要的ActionFunc<T>

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

答案 1 :(得分:0)

好的,今天早上以清醒的头脑看着这个。我回到了跑步的那个,但没有产生结果。结果发现与调度程序关联的线程是状态waitsleepjoin中的后台线程。我需要的对象是图像。通过冻结图像,我发现我根本不需要担心线程问题 - 没有可用的调度程序。 希望这有助于其他人。 马丁