我会尽量保持这简短而甜蜜。 我有这个代码是按下按钮的结果(所以它在主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();
答案 0 :(得分:0)
解决了它。
我一直在打开数据库。并简单地应用锁定机制
lock(SQLight.Connection)
{
...
}
这意味着我的所有线程都使用相同的连接,但每个线程只能依次与数据交互。
这似乎达到了我想要的目标