Xamarin.iOS主要和背景线程不好看

时间:2016-03-01 10:12:48

标签: c# ios multithreading xamarin.ios monitor

我会尽量保持这简短而甜蜜。 我有这个代码是按下按钮的结果(所以它在主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();

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

解决了它。

我一直在打开数据库。并简单地应用锁定机制

lock(SQLight.Connection)
{
     ...
}

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

这似乎达到了我想要的目标