【发布时间】:2016-03-01 10:12:48
【问题描述】:
我会尽量保持简短和甜蜜。 我有这个代码是按下按钮的结果(所以它在主 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();
当主用户界面卡在锁上时,它似乎......它也不允许后台线程继续,因此后台线程无法继续调用Monitor.Exit();
我错过了什么吗?
【问题讨论】:
标签: c# ios multithreading xamarin.ios monitor