Xamarin.iOS主线程和后台线程不能很好地播放

本文关键字:线程 很好 播放 不能 iOS Xamarin 后台 | 更新日期: 2023-09-27 18:37:01

我会尽量保持简短和甜蜜。我有这段代码,它是按下按钮的结果(所以它在主 UI 线程上)

MessageCenter.Init();

上面的方法可以做到这一点(以及其他事情)

 NS = NSTimer.CreateRepeatingScheduledTimer(TimeSpan.Parse("00:00:30"), delegate
                {
                    NSObject.InvokeInBackground(() =>
                        {
                            HandleElapsed();
                        });

                });

HandleElapsed();使用 Monitor.Enter(obj) 方法获取对象的独占锁。 这意味着主 UI 线程也可能需要获取独占锁。(锁定到位以确保SQLite数据完整性)

当主 UI 遇到对象上的锁(即它已经锁定)时,整个应用程序就会停止(包括后台线程)

我应该提到,当 UI 被告知更改其内容时,可能需要锁定。 HandleElapsed();将要求主 UI 线程更改其内容。

NSNotificationCenter.DefaultCenter.PostNotificationName("ChangeDetail", new NSString("News"));

请注意,内容更改在主线程上完成

UIApplication.SharedApplication.InvokeOnMainThread();

似乎当主 UI 卡在锁上时......它也不允许后台线程继续,因此后台线程无法在调用Monitor.Exit();

我错过了什么吗?

Xamarin.iOS主线程和后台线程不能很好地播放

解决了。

我始终保持数据库打开状态。 并简单地应用了锁定机制

lock(SQLight.Connection)
{
     ...
}

这意味着我的所有线程都使用相同的连接,但每个线程只能依次与数据交互。

这似乎已经达到了我想要的