我正在使用Xamarin Forms应用。我需要在应用初始化时检查每次代码是否有效。我正在使用下面的代码。它第一次工作正常。但当我按下按钮并重新打开应用程序时,应用程序崩溃了。获取NullReference错误。如何在App启动时处理此问题? 我的代码是:
public App()
{
InitializeComponent();
try
{
if (string.IsNullOrEmpty(SettingClass.SiteCode) && string.IsNullOrEmpty(SettingClass.SiteId))
MainPage = new LoadScreenPage();
else
{
Task.Run(async () => { var sitecode = await SettingClass.DataServiceObj.GetSiteCodeInformation(SettingClass.SiteCode);
if (sitecode != null)
{
if (sitecode.Id != null)
{
MainPage mainPage = new MainPage();
mainPage.SelectedItem = mainPage.Children[1];
MainPage = mainPage;
}
else
{
MainPage = new LoadScreenPage();
}
}
}).Wait();
}
}
catch (Exception ex)
{
Debug.Write(ex.Message.ToString());
}
}
这是对的。如果那么为什么我会收到错误? 如果没有正确的方法来处理这个,那么另一个选择是什么?
答案 0 :(得分:0)
答案很简单 - 您不想在应用初始化时处理任务。 "任务"意味着可能是一个长期运行的程序。常用于下载或处理数据。你不想因为这个而推迟你的应用程序启动,对吧?除此之外,目前还没有办法用async
关键字标记构造函数。
例如,您可以将Task
移至应用程序的生命周期事件之一,例如OnStart()
,可以标记为async
。但是,为什么不让应用程序成功加载,向用户显示一些ui,而不是在虚拟页面中做任何你需要做的事情?
答案 1 :(得分:0)
尝试将else
部分添加到if sitecode
为空
if (sitecode != null)
{
if (sitecode.Id != null)
{
MainPage mainPage = new MainPage();
mainPage.SelectedItem = mainPage.Children[1];
MainPage = mainPage;
}
else
{
MainPage = new LoadScreenPage();
}
}
else
{
MainPage = new LoadScreenPage();
}