Xamarin iOS:启动计时器使应用程序无一例外地崩溃
Xamarin iOS: Starting timer crashes app with no exception
我正在开发一个 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");
}
}
}
我想检查登录令牌并在此屏幕上停留直到 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")
我认为你的问题是因为当你试图在这个app.So中做一些操作时你甚至没有启动应用程序,它无一例外地崩溃了。
解法:
在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);
}
}
我正在开发一个 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");
}
}
}
我想检查登录令牌并在此屏幕上停留直到 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")
我认为你的问题是因为当你试图在这个app.So中做一些操作时你甚至没有启动应用程序,它无一例外地崩溃了。
解法:
在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);
}
}