Xamarin.iOS主线和后台线程打得不好
问题描述:
我会尽量保持这个简短和甜蜜。 我有这样的代码,其是被按下的按钮的结果(因此其对主UI线程)Xamarin.iOS主线和后台线程打得不好
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)
{
...
}
这意味着我的所有线程使用相同的连接,但每个线程只能反过来的数据进行交互。
这似乎已经达到我想要的