我正在将我现有的(快速) iOS物理治疗应用程序“神经上”改写为Xamarin.Forms。这是一个帮助神经损伤患者的计时器应用程序(就像我一样!)做他们的脱敏运动。你有这些“织物”(例如羽毛),每种织物都有一个'x‘秒倒计时。一旦fabric的计时器达到0,就会出现一个消息框,上面写着“时间到了”。用户点击OK,下一个布料开始倒计时。清洗并重复使用清单中的所有织物。这是一个显示工作流的视频。相信我在视频中的UX。
这是我的演示这种行为的示例应用程序代码。
DoSomethingForNow方法(请原谅我的命名策略)是在计时器启动时创建的来自NotificationService的回调(参见第65行--没有足够的代表点直接链接),以防应用程序获得背景信息。
在设备上不使用释放模式的特定调用位于第115行。
Device.BeginInvokeOnMainThread(
async () => await ShowAlertAndWaitForUser(currentFabricCount));async () => await ShowAlertAndWaitForUser(currentFabricCount))在iOS模拟器上的调试和发布配置以及设备上的调试配置中都可以正常工作。
但是,指示时间已过的消息框不会出现在物理设备上的发布配置中。我不明白为什么Device.BeginInvokeOnMainThread()不能在设备上的发布配置中工作。怎么一回事?
旁注:重新使用Device.StartTimer()
我很早就从Device.StartTimer()转向了詹姆斯的FrenchPressTimer解决方案(参见jamesmontemagno/FrenchPressTimer),因为我需要一种方法来取消/停止/任何Device.StartTimer(),以防用户需要暂停或停止应用程序的倒计时。
在模拟器和设备上的所有配置中,Device.StartTimer()代码都非常适合我,谢天谢地有人教我如何取消Device.StartTimer (谢谢!)如果您想看到这个工作解决方案,请查看GitHub上的saraford/Device-StartTimer Xamarin。
我的具体问题是为什么Device.BeginInvokeOnMainThread()在物理设备的发布配置中调用通知回调时不显示消息框。
我也尝试过不同的链接组合。没有效果。
发布于 2019-09-07 00:50:13
以下是一个有用的答案,但正如@JamesMallon所提到的,不要使用它:
Device.BeginInvokeOnMainThread(ShowAlertAndWaitForUser(currentFabricCount).Result);
在主/UI线程中没有运行代码的情况下,您的问题非常常见。似乎在主线程上开始调用,但UI线程并没有实际读取行,相反,另一个线程正在执行所需的操作。这也是为什么它在某些时候起作用而在其他时候不起作用的原因。
因此,与其在UI线程上执行整个ShowAlertAndWaitForUser(),不如只在该线程上运行DisplayAlert函数。
发布于 2017-10-03 09:21:58
对于IOS 8,使用警报控制器。
var okAlertController = UIAlertController.Create ("OK Alert", "This is a
sample alert with an OK button.", UIAlertControllerStyle.Alert);发布于 2019-10-12 14:51:12
我在安卓上显示加载屏幕时,Acr.UserDialogs插件也面临着类似的问题。
似乎您的主线程正在使用,而不是Device.BeginInvokeOnMainThread,而只是使用await ShowAlertAndWaitForUser(currentFabricCount)调用代码,使DoSomethingForNow成为一个async方法。
它的好主意是在视图模型类中实现INotifyPropertyChanged,然后绑定它,而不是抛出代码隐藏中的所有内容。
https://stackoverflow.com/questions/46491815
复制相似问题