Я постараюсь сохранить это короткое и сладкое. У меня этот код, который является результатом, что кнопка будет нажата (поэтому его в основном потоке пользовательского интерфейса)Xamarin.iOS основные и фоновые темы не играют хорошо
MessageCenter.Init();
вышеуказанный способ делает это (как и другие вещи)
NS = NSTimer.CreateRepeatingScheduledTimer(TimeSpan.Parse("00:00:30"), delegate
{
NSObject.InvokeInBackground(() =>
{
HandleElapsed();
});
});
HandleElapsed();
получает эксклюзивную блокировку объекта с использованием метода Monitor.Enter(obj)
. в то время как основной нити ui также может потребоваться получить эксклюзивный замок. (Замок находится в месте, чтобы обеспечить целостность SQLITE данных)
, когда основной интерфейс встречает блокировку на объект (т.е. его уже заблокирован) все приложение просто останавливается (включая фоновый поток)
Я должен упомянуть пользовательскому интерфейсу может потребоваться блокировка, когда ему будет предложено изменить его содержимое. HandleElapsed();
попросит основной поток пользовательского интерфейса изменить его содержимое.
NSNotificationCenter.DefaultCenter.PostNotificationName("ChangeDetail", new NSString("News"));
обратите внимание на изменение содержимого завершается в основном потоке
UIApplication.SharedApplication.InvokeOnMainThread();
его, кажется, когда основной пользовательский интерфейс застрял на замок ... его также не позволяет фоновый поток в продолжить, поэтому фоновый поток не может переместиться по вызову на Monitor.Exit();
Я что-то не хватает?