【发布时间】:2021-08-11 18:36:00
【问题描述】:
我正在 Xamarin 应用程序的页面之间切换。从每 10 秒更新一次的列表,到每 250 毫秒检查一次布尔值的另一种形式。两者都运行 Device.StartTimer,但不应重叠。
这是列表表单上的开始计时器:
protected override void OnAppearing()
{
base.OnAppearing();
vm.cmdReload.Execute(null);
//...
blnTimerActive = true;
startTimer();
}
private void startTimer()
{
Device.StartTimer(System.TimeSpan.FromSeconds(10), () =>
{
if (!blnTimerActive)
return false;
UpdateUserDataAsync();
return true;
}); // This is where it breaks, I think..
}
protected override void OnDisappearing()
{
base.OnDisappearing();
blnTimerActive = false;
}
每次我尝试运行时,它都会显示一条错误消息,指出“线程上没有运行兼容的代码”和“对象引用未设置为对象的实例”。 Error message
这发生在我在下一个表格上并且这个表格“消失”之后我不确定为什么这个计时器仍在运行。任何帮助深表感谢!如果我能让这个问题更容易理解,请告诉我。
【问题讨论】:
-
首先,使用 System.Timers,而不是 Device.StartTimer。其次,如果您遇到异常,请添加一些异常处理代码(即 try/catch)来捕获异常,以便您了解实际发生的情况。第三,错误似乎很可能在
UpdateUserDataAsync -
好的,我将在 UpdateUserDataAsync 周围添加一些异常处理,看看是否有任何弹出。我确实尝试添加一个包含 Device.TimerStart 的 try catch,它在没有通过 catch 的情况下直接在其中崩溃。我会在尝试您所说的内容时回复您。
-
您可以添加一些断点来找出问题的原因
标签: c# xamarin asynchronous