UnoPlatform-应用程序调用了为另一个线程编组的接口

问题描述 投票:0回答:1

我正在为我的Uno平台应用程序使用Uno棱镜模板。在UWP应用中进行异步调用后。即

var content = await GetHttpContentWithTokenAsync(graphAPIEndpoint,authResult.AccessToken).ConfigureAwait(false);

每当RaisePropertyChanged()方法命中时,我都会收到以下错误信息=>{“应用程序调用了一个已编组为不同线程的接口。(来自HRESULT的异常:0x8001010E(RPC_E_WRONG_THREAD))“]

Git repo => https://github.com/avikeid2007/Repayabl

文件=> https://github.com/avikeid2007/Repayabl/blob/dev/RepayablClient/RepayablClient.Shared/ViewModels/LoginViewModel.cs#L131

prism uno-platform
1个回答
1
投票

如评论中所述,这里的问题是.ConfigureAwait(false)的使用。

ConfigureAwait(false)告诉编译器,“在等待该方法执行之后,不必费心回到当前上下文,我很好。”在某些情况下,这可能是适当的优化,甚至可以防止死锁,尤其是在编写类库时。

但是通常不应该在UI线程的回调中使用它,像这种情况。在UWP以及实际上大多数UI框架中,您只能从主UI线程修改UI,否则您将得到所提到的错误。因此,您需要在等待的方法完成后返回到相同的上下文。

TLDR:删除ConfigureAwait(false),不要在从UI线程调用的async方法中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.