C# 如何在反序列化大JSON文件时显示具有不确定进度环的消息框?
我有一个运行mvvm模式的小型uwp应用程序,它需要在执行过程中的某个时刻加载一个大的JSON文件。我想打印一个带有不确定进度环控件的消息框,直到反序列化完成。 我想异步等待C# 如何在反序列化大JSON文件时显示具有不确定进度环的消息框?,c#,json,mvvm,uwp,async-await,C#,Json,Mvvm,Uwp,Async Await,我有一个运行mvvm模式的小型uwp应用程序,它需要在执行过程中的某个时刻加载一个大的JSON文件。我想打印一个带有不确定进度环控件的消息框,直到反序列化完成。 我想异步等待JsonConvert.DeserializeObject的结果,同时打印消息框。 大概是这样的: MyClass反序列化(字符串文本、JsonSerializerSettings设置) { MyClass结果=JsonConvert.DeserializeObject(文本、设置); } 专用异步void加载Screena
JsonConvert.DeserializeObject
的结果,同时打印消息框。
大概是这样的:
MyClass反序列化(字符串文本、JsonSerializerSettings设置)
{
MyClass结果=JsonConvert.DeserializeObject(文本、设置);
}
专用异步void加载ScreenaSync()
{
var dialog=new MessageDialogWithFancySpinningRing();//但实际上我不知道怎么做;)
wait dialog.ShowAsync();
}
var deserializeTask=反序列化(MyText,MySettings);
Var LoadingScreenTask=LoadingScreenAsync();
MyClass结果=等待反序列化任务;
wait dialog.ShowAsync();
// ... 继续结果
尽管我还没有尝试过,因为从我所读到的内容来看,我认为它不起作用,因为反序列化
和jsonvert.DeserializeObject
不是异步方法。我需要在另一个线程上运行反序列化,对于这样一个简单的事情来说,这看起来很麻烦
有什么想法吗
如何在反序列化大JSON文件时显示具有不确定进度环的消息框
首先,需要在非UI线程中调用反序列化
方法,然后在反序列化
完成后调用dialogHide
反序列化
是一项耗时的操作。请在任务中运行它,并在方法头部添加等待关键字。有关更多信息,请参考以下代码
private ContentDialog noWifiDialog;
private async void DisplayNoWifiDialog()
{
noWifiDialog = new ContentDialog()
{
Title = "Deserialize Json ",
Content = new ProgressRing() { Name = "MyProsress", IsActive = true },
CloseButtonText = "Ok"
};
await noWifiDialog.ShowAsync();
}
private Task Deserialize()
{
return Task.Run(() =>
{
for (int i = 0; i < 1000000000; i++)
{
// Simulated time-consuming operation
}
});
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
DisplayNoWifiDialog();
await Deserialize();
noWifiDialog.Hide();
}
private ContentDialog noWifiDialog;
私有异步void DisplayNoWifiDialog()
{
noWifiDialog=newcontentdialog()
{
Title=“反序列化Json”,
Content=newprogressring(){Name=“myproress”,IsActive=true},
CloseButtonText=“确定”
};
wait noWifiDialog.ShowAsync();
}
私有任务反序列化()
{
返回任务。运行(()=>
{
对于(int i=0;i<100000000;i++)
{
//模拟耗时操作
}
});
}
专用异步无效按钮\u单击(对象发送方,路由目标)
{
DisplayNoWifiDialog();
等待反序列化();
noWifiDialog.Hide();
}
只是一个想法。为什么不尝试等待游标,直到Json被反序列化,而不是消息框呢。在运行Json Convert时,我从未尝试过使用progress ring的MessageBox。这是一个很好的解决方案,尽管我想解释一下MessageBox中的内容,并允许用户选择应用程序下一步要做什么的设置(有点像某些安装程序),但我发现了一些有趣的东西。请检查谢谢我感谢你的研究尽管Backgroundworker有点像async/await的祖先,而且据我所知更像winform。这不是你真正的代码,也不会编译,所有这些东西是什么代码>异步void不会返回任务