gpt4 book ai didi

c# - Xamarin iOS : Starting timer crashes app with no exception

转载 作者:行者123 更新时间:2023-11-28 23:42:46 24 4
gpt4 key购买 nike

我正在开发一个 Xamarin Forms 应用程序,我需要为其编写一些原生代码,我的代码在 Android 中运行,但我无法让它在 iOS 上运行。在 Main.cs 中,我使用 NSTimer 启动一个预定计时器,完成后应启动 Xamarin 应用程序的 AppDelegate 代码。

Main.cs:

public class Application
{
private static ISettings AppSettings => CrossSettings.Current;
private static double startTimeMillis;

static void Main(string[] args)
{
startTimeMillis = DateTime.Now.Ticks / TimeSpan.TicksPerSecond;
CheckSavedToken(args);
}

private static void CheckSavedToken(string[] args)
{
if (AppSettings.Contains(App.LoginToken))
{
string loginToken = AppSettings.GetValueOrDefault(App.LoginToken, string.Empty);
if (loginToken == string.Empty)
{
AppSettings.Remove(App.LoginToken);
}
}
double delay = 750 - (DateTime.Now.Ticks / TimeSpan.TicksPerSecond - startTimeMillis);
if (delay > 0)
{
NSTimer.CreateScheduledTimer(delay, timer => UIApplication.Main(args, null, "AppDelegate"));
}
else
{
UIApplication.Main(args, null, "AppDelegate");
}
}
}

我想检查登录 token 并在此屏幕上停留直到 750 毫秒过去,之后 AppDelegate 可以启动应用程序的 Xamarin Forms 部分。

我不知道我做错了什么,我尝试使用 try catch 进行调试,但应用程序在未到达 catch 时崩溃,我也尝试使用 Task.Delay(),但是做同样的事情。即使我将时间设置为 1,仍然没有任何反应。

编辑:

我还尝试使用 DispatchQueue (具有相同的结果):

DispatchQueue.MainQueue.DispatchAfter(new DispatchTime(DispatchTime.Now, new TimeSpan(0, 0, 0, 0, (int)delay)), 
() => UIApplication.Main(args, null, "AppDelegate"));

我希望有人能帮助我解决这个问题。提前致谢。

最佳答案

原因:

Main 方法用于启动应用程序。

UIApplication.Main(args, null, "AppDelegate")

我认为您的问题是由于当您尝试在该应用程序中执行某些操作时甚至没有启动应用程序而引起的。因此,它毫无异常(exception)地崩溃了。

解决方案:

在Main方法之后你想要延迟的地方添加你的延迟代码;

您可以在 iOS 中添加到FinishedLaunching。 AppDelegate.cs:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init();


startTimeMillis = DateTime.Now.Ticks / TimeSpan.TicksPerSecond;

double delay = 750 - (DateTime.Now.Ticks / TimeSpan.TicksPerSecond - startTimeMillis);
if (delay > 0)
{
Task.Delay(5000).Wait();

LoadApplication(new App());

return base.FinishedLaunching(app, options);

}
else
{
LoadApplication(new App());
return base.FinishedLaunching(app, options);

}

}

关于c# - Xamarin iOS : Starting timer crashes app with no exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53086129/

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