問題是:如何在沒有UI線程的iOS MonoTouch(如UIScreen.MainScreen.Bounds
)中獲得屏幕分辨率? 酒店.MainScreen
拋出一個異常在MonoTouch中獲取沒有UI的iOS屏幕分辨率
UIKit Consistency error: you are calling a UIKit method that can only be invoked from the UI thread.
因此我需要一個UI線程。但是由於在加載應用程序之前需要解析,因此在調用UIApplication.Main()
之前,UIApplication.mainThread
(由調試器顯示的私有成員)爲null
。由於沒有用戶界面,我假設根本沒有UI線程。所以我在技術上不能在任何對象上調用InvokeOnMainThread
。
是否有任何其他方式獲得屏幕分辨率沒有UIScreen.MainScreen
?如果不是,我將不得不將初始化移動到從UI調用的一些代碼。那麼還有另外一個問題:我如何從任意線程獲取任何UI對象(稱爲InvokeOnMainThread
)?我無法控制UI代碼。
它的工作!如果我對MainScreen不做任何處理,但是讀取「Bounds」,它是否是線程安全的? – Aneri 2013-03-27 19:59:46
這是**不是**線程安全的,但如果你在調用'UIApplication.Main()'之前這樣做了,那麼你可能*(如果你沒有創建一些線程)在** main **線程 - 這將是UI線程(但我們的支票尚未初始化)。 – poupou 2013-03-27 21:37:23
謝謝你的解釋。我的確在主線上。但我想知道爲什麼閱讀(不變)值不是線程安全的?我明白爲什麼(可能)'.MainWindow'' get'不是線程安全的:我可以用它做各種事情。也許'MainScreen'的'get'做了一些非線程安全的事情? – Aneri 2013-03-28 15:04:23