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();
我错过了什么吗?
解决了。
我始终保持数据库打开状态。 并简单地应用了锁定机制
lock(SQLight.Connection)
{
...
}
这意味着我的所有线程都使用相同的连接,但每个线程只能依次与数据交互。
这似乎已经达到了我想要的