gpt4 book ai didi

c# - Xamarin.ios - 计时器在时间后不执行操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:15:50 26 4
gpt4 key购买 nike

我目前正在 Xamarin.ios 中制作一个小游戏,我的想法是从你按下开始到结束(并带你进入游戏结束屏幕)之间有 30 秒的时间,但如果你做错了一步,那么它也游戏结束了。我正在使用 System.Timers 并且计时器正常启动并开始滴答作响,但是当您到达 30 秒并停止时,它会打印到控制台,表明计时器已完成但随后不执行任何我想要的操作。我已经尝试了我能想到的一切,但似乎无法弄清楚。感谢您的帮助,谢谢!也提前抱歉,这是我第一次使用 stackoverflow。

主要代码如下:

    //Setting up the timer
int count = 1;
System.Timers.Timer timer1;

private void OnTimeEvent(object source, ElapsedEventArgs e)
{
count++;
Console.WriteLine ("timer tick");
if (count == 30)
{
timer1.Enabled = false;
Console.WriteLine ("timer finished");

//**Everything from here on is just what I want to happen**
imgBackground.Image = UIImage.FromFile ("gameover.jpg");
btn1.SetBackgroundImage (null, UIControlState.Normal);
btn2.SetBackgroundImage (null, UIControlState.Normal);
btn3.SetBackgroundImage (null, UIControlState.Normal);
btn4.SetBackgroundImage (null, UIControlState.Normal);
lblTime.Text = "";
btnStart.Enabled = true;
hasend = true;
//score is set back to 0
score = 0;
btn1green = false;
btn2green = false;
btn3green = false;
btn4green = false;
}
}

这是我在开始按钮上的内容(效果很好)

    //Start the timer
timer1.Enabled = true;
Console.WriteLine("timer started");

这是当你走错一步时我得到的结果(也可以正常工作)

        else
{
//adjust the UI
imgBackground.Image = UIImage.FromFile("gameover.jpg");
btn1.SetBackgroundImage(null, UIControlState.Normal);
btn2.SetBackgroundImage(null, UIControlState.Normal);
btn3.SetBackgroundImage(null, UIControlState.Normal);
btn4.SetBackgroundImage(null, UIControlState.Normal);
lblTime.Text = "";
btnStart.Enabled = true;
hasend = true;
//score is set back to 0
score = 0;
btn1green = false;
btn2green = false;
btn3green = false;
btn4green = false;
timer1.Enabled = false;
Console.WriteLine("timer stopped");
}

正如您所看到的,一旦计时器结束,UI 中的更改量就足够了。我认为这可能与它不起作用的原因有关

编辑:这也是我在 ViewDidLoad () 下设置计时器的地方

timer1 = new System.Timers.Timer();
timer1.Interval = 1000;
timer1.Elapsed += new ElapsedEventHandler(OnTimeEvent);

最佳答案

问题是 Timer 在后台线程上执行。后台线程不能修改 UI 对象。

timer1.Elapsed 是从 ViewDidLoad() 中的 UI 线程设置的。但它将从后台线程调用。

解决方案是将影响 UI 对象的代码包装在 InvokeOnMainThread (iOS) 或 RunOnUIThread (Android) 中。

以 InvokeOnMainThread 为例:http://developer.xamarin.com/guides/ios/user_interface/controls/part_2_-_working_with_the_ui_thread/

关于c# - Xamarin.ios - 计时器在时间后不执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25619057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com