【问题标题】:Crash after Device.StartTimer XamarinDevice.StartTimer Xamarin 后崩溃
【发布时间】: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


【解决方案1】:

我通过仔细检查输出找到了答案。它在我的代码中崩溃了,但不知何故没有显示中断发生的位置。我检查了输出,它准确地显示了它的位置。

如果您遇到这种情况,请仔细检查您的输出。它应该 说出出错的行号,添加 try catch,然后执行 通过。这样你应该很容易发现你的错误。

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多