问题是:如何在没有 UI 线程的情况下在 iOS MonoTouch(如 UIScreen.MainScreen.Bounds
)中获得屏幕分辨率?
属性 .MainScreen
抛出异常
UIKit Consistency error: you are calling a UIKit method that can only be invoked from the UI thread.
因此我需要一个 UI 线程。但是由于在加载应用程序之前需要解析,在 UIApplication.Main()
被调用之前,UIApplication.mainThread
(私有(private)成员,由调试器显示)是 空
。我假设根本没有 UI 线程,因为没有 UI。所以我在技术上不能在任何对象上调用 InvokeOnMainThread
。
没有UIScreen.MainScreen
,有没有其他方法可以获取屏幕分辨率?如果没有,我将不得不将初始化移动到从 UI 调用的一些代码。然后还有另一个问题:如何从任意线程获取任何 UI 对象(调用 InvokeOnMainThread
)?我无法控制 UI 代码。
最佳答案
UI 线程检查是 optional并且可以全局或局部禁用。后面的(本地)选项似乎符合您的需要。
以下代码将关闭检查、获取边界并重新启用检查(如果之前已启用)。
bool check_ui = UIApplication.CheckForIllegalCrossThreadCalls;
UIApplication.CheckForIllegalCrossThreadCall = false;
var screen_bounds = UIScreen.MainScreen.Bounds;
UIApplication.CheckForIllegalCrossThreadCalls = check_ui;
关于c# - 在 MonoTouch 中获取没有 UI 的 iOS 屏幕分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15660781/