问题是:如何在没有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