在Xamarin.Forms中,Device.BeginInvokeOnMainThread()不会在物理设备上的Release config中显示来自通知回调**的消息框

sar*_*ord 40 c# xamarin xamarin.forms

我正在将我现有的(快速)iOS物理治疗应用程序"On My Nerves"重写为Xamarin.Forms.它是一个计时器应用程序,以帮助神经损伤的人(像我!)做脱敏练习.你有这些"面料"(例如羽毛),每个面料都有'x'秒倒计时.当织物的计时器达到0时,会出现一个消息框,显示"时间已到".用户点击OK,下一个结构开始倒计时.冲洗并重复列表中的所有织物.这是一个显示工作流程视频.相信视频中的用户体验.

这是我的示例应用程序代码,演示了这种行为.

DoSomethingForNow方法(原谅我的命名策略)是来自NotificationService的回调(参见第65行 - 没有足够的直接链接的SO重复点),这是在计时器启动时创建的,以防应用程序获得后台.

在设备上发布模式不起作用的特定呼叫位于第115行

Device.BeginInvokeOnMainThread(
                async () => await ShowAlertAndWaitForUser(currentFabricCount));
Run Code Online (Sandbox Code Playgroud)

async () => await ShowAlertAndWaitForUser(currentFabricCount))预期在调试和发布在iOS模拟器,并在设备的调试配置的配置工作.

但是,指示时间已启动的消息框未显示在物理设备上的Release config中.我无法弄清楚为什么Device.BeginInvokeOnMainThread()在设备上的Release配置中不起作用.到底是怎么回事?

侧边重新使用 Device.StartTimer()

之前我之所以切换 到James的FrenchPressTimer解决方案(请参阅jamesmontemagno/FrenchPressTimer)是因为我需要一种方法来取消/停止/无论用户需要暂停还是停止应用倒计时.Device.StartTimer() Device.StartTimer()

代码为我所有配置上都模拟器和设备的伟大工程,幸好有人告诉我如何取消Device.StartTimer(谢谢!).如果你想看到这个有用的解决方案,请在GitHub上查看saraford/Device-StartTimer-Working-Xamarin.Device.StartTimer()

我的具体问题是,Device.BeginInvokeOnMainThread()当物理设备上的Release config中的通知回调调用时,为什么不显示消息框.

我也尝试了不同的链接器组合.没有效果.

Ram*_*dom 0

对于 IOS 8,请使用警报控制器。

https://developer.xamarin.com/recipes/ios/standard_controls/alertcontroller/

var okAlertController = UIAlertController.Create ("OK Alert", "This is a 
sample alert with an OK button.", UIAlertControllerStyle.Alert);
Run Code Online (Sandbox Code Playgroud)