编程语言
首页 > 编程语言> > c#-在MonoTouch中获取没有UI的iOS屏幕分辨率

c#-在MonoTouch中获取没有UI的iOS屏幕分辨率

作者:互联网

问题是:如何在没有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(调试器显示的私有成员)为null.我假定根本没有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;

标签:xamarin-ios,uikit,ios,c,user-interface
来源: https://codeday.me/bug/20191031/1973003.html