我正在为我的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
如评论中所述,这里的问题是.ConfigureAwait(false)
的使用。
用ConfigureAwait(false)
告诉编译器,“在等待该方法执行之后,不必费心回到当前上下文,我很好。”在某些情况下,这可能是适当的优化,甚至可以防止死锁,尤其是在编写类库时。
但是通常不应该在UI线程的回调中使用它,像这种情况。在UWP以及实际上大多数UI框架中,您只能从主UI线程修改UI,否则您将得到所提到的错误。因此,您需要在等待的方法完成后返回到相同的上下文。
TLDR:删除ConfigureAwait(false)
,不要在从UI线程调用的async
方法中使用它。