1

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

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

4

1 回答 1

3

正如评论中提到的,这里的问题是使用.ConfigureAwait(false).

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

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

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

于 2020-06-01T13:08:53.080 回答