gpt4 book ai didi

c# - 如何在 WinRT 的应用 ViewModel 中异步使用 json.net?

转载 作者:行者123 更新时间:2023-12-03 10:23:00 24 4
gpt4 key购买 nike

我有 MVVM(Prism) Windows Store 应用程序,但我不明白如何在 ViewModel 层中使用 Json.NET 库(版本 6.0.4)进行异步序列化/反序列化。

我有绑定(bind)到 GridView 的 ItemClick 事件的方法:

public async void GridViewClick(object sender, ItemClickEventArgs parameter)
{
if (App.IsInternet())
{
if (parameter != null)
_navigationService.Navigate("AnimeDetails",
await Task.Run(() => JsonConvert.SerializeObject(parameter.ClickedItem)));
}
else
{
new MessageDialog(ResourceController.GetTranslation("MainPage_FeatureUnavaliableOffline")).ShowAsync();
}
}

此方法引发以下异常:

The application called an interface that was marshalled for a different thread. (Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))



我尝试使用 Dispatcher,但它对我没有帮助(类似的错误线程异常)。
        public async void GridViewClick(object sender, ItemClickEventArgs parameter)
{
if (App.IsInternet())
{
var serializedItem = string.Empty;
await
Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
async () =>
await Task.Run(() => serializedItem = JsonConvert.SerializeObject(parameter.ClickedItem)));
if (parameter != null)
_navigationService.Navigate("AnimeDetails", serializedItem);
}
else
{
new MessageDialog(ResourceController.GetTranslation("MainPage_FeatureUnavaliableOffline")).ShowAsync();
}
}

谁能解释一下,如何正确地进行序列化/反序列化?

最佳答案

通常,序列化速度足够快,您可以直接执行,而完全不会弄乱后台线程:

if (parameter != null)
_navigationService.Navigate("AnimeDetails",
JsonConvert.SerializeObject(parameter.ClickedItem));

但是,如果您的对象非常大并且您确定要使用后台线程,那么您只需在 UI 线程上进行任何 UI 访问(即 ItemClickEventArgs.ClickedItem )并在后台线程上进行序列化:
if (parameter != null)
{
var item = parameter.ClickedItem;
_navigationService.Navigate("AnimeDetails",
await Task.Run(() => JsonConvert.SerializeObject(item)));
}

关于c# - 如何在 WinRT 的应用 ViewModel 中异步使用 json.net?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25285939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com