2
我會盡量保持這個簡短和甜蜜。 我有這樣的代碼,其是被按下的按鈕的結果(因此其對主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();
我錯過了什麼?