iOS:将ObjC代码转换为C#,如何知道应用程序空闲的时间

iOS:将ObjC代码转换为C#,如何知道应用程序空闲的时间,ios,objective-c,xamarin.ios,Ios,Objective C,Xamarin.ios,我是iOS开发新手,我使用monotouch开发iOS应用程序,我想知道应用程序空闲的时间,我得到了ObjC代码,但无法将其转换为c。 代码如下: -(void)sendEvent:(UIEvent*)事件{ [超级发送事件:事件]; //只想在开始触摸或结束触摸时重置计时器,以减少计时器重置次数。 NSSet*AllTouchs=[event AllTouchs]; 如果([AllTouchs计数]>0){ //AllTouchs count only似乎是1,所以anyObject在这里工作

我是iOS开发新手,我使用monotouch开发iOS应用程序,我想知道应用程序空闲的时间,我得到了ObjC代码,但无法将其转换为c。 代码如下:

-(void)sendEvent:(UIEvent*)事件{
[超级发送事件:事件];
//只想在开始触摸或结束触摸时重置计时器,以减少计时器重置次数。
NSSet*AllTouchs=[event AllTouchs];
如果([AllTouchs计数]>0){
//AllTouchs count only似乎是1,所以anyObject在这里工作。
UITouchPhase=((UITouch*)[AllTouchAnyObject])阶段;
如果(相位==UITouchPhaseBegan | |相位==UITouchPhaseEded)
[自复位IDletimer];
}
}
-(无效)重置IDletimer{
如果(空闲时间){
[idleTimer invalidate];
[空闲释放];
}
idleTimer=[[NSTimer scheduledTimerWithTimeInterval:maxIdleTime目标:自选择器:@selector(IDletimerExcepended)userInfo:nil repeats:NO]retain];
}
-(无效)空闲时间{
NSLog(@“超过空闲时间”);
}

有人能帮我把它转换成c#吗?

当然有更好的方法来实现这一点,但是让我们把这个
Obj-c
代码转换成
Xamarin.iOS
c#

sendEvent
是一种
UIApplication
的方法。将其子类化是非常少见的,请参见上的子类化notes

一旦对它进行子类化,就必须指示运行时使用它,这是在
Main
方法中完成的,通常可以在
Main.cs
中找到。下面是修改后的
Main.cs
现在的样子

公共类应用程序
{
//这是应用程序的主要入口点。
静态void Main(字符串[]参数)
{
UIApplication.Main(args,“MyApplication”、“AppDelegate”);
}
}
[注册(“我的申请”)]
公共类MyApplication:UIApplication
{
}
注意类上的
Register
属性,它用作
UIApplication.Main的第二个参数

现在,让我们将您的代码翻译成真实的代码:

[注册(“MyApplication”)]
公共类MyApplication:UIApplication
{
公共覆盖无效SendEvent(UIEvent UIEvent)
{
base.SendEvent(uievent);
var alltouchs=uievent.alltouchs;
如果(AllTouchs.Count>0){
var phase=((UITouch)allTouchs.AnyObject)阶段;
如果(相位==UITouchPhase.Start | |相位==UITouchPhase.End)
ResetIdleTimer();
}
}
NSTimer-idleTimer;
void ResetIdleTimer()
{
if(idleTimer!=null){
idleTimer.Invalidate();
Release();
}
idleTimer=NSTimer.CreateScheduledTimer(TimeSpan.FromHours(1),TimerExceeded);
}
无效时间间隔()
{
Debug.WriteLine(“超出空闲时间”);
}
}

我将
maxIdleTime
替换为
TimeSpan.FromHours(1)
。否则,您将有与Obj-C相同的行为,包括任何错误(尽管看起来还可以)。

谢谢Stephane为我做了这项伟大的工作,它的工作非常有魅力,我也从您今天得到的答案中得到了一些想法。哈哈,我很确定我已经回答了一些需要覆盖UIApplication的问题!令人惊叹的。刚发现应该是idleTimer.Dispose();而不是“释放”和TimerExceed(NSTimer obj)。