2017-06-17 96 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));