gpt4 book ai didi

c# - Xamarin iOS Sleep UI线程不起作用

转载 作者:行者123 更新时间:2023-12-01 19:01:30 25 4
gpt4 key购买 nike

我的Xamarin iOS应用程序存在线程/ sleep 问题。我想创建一个简单的游戏,一种内存游戏。按下开始按钮时,将有4个按钮将更改其字体。从1开始,然后从2开始,依此类推。问题是我想在显示按钮的方法中暂停一下,因为用户需要几秒钟才能看到更改的颜色。我认为多线程直接 catch 了下一个任务,所以 sleep 不见了:(如何解决这个问题?谢谢!

代码:

    partial void btnStart (NSObject sender)
{
teller++;

InvokeOnMainThread( ()=> { for (int i = 0; i < teller; i++) {
String randomGetal = randomizer();
Lijst.Add(new Opslag() {nummerGetal = teller, getal = randomGetal});
ThreadPool.QueueUserWorkItem(o => InvokeOnMainThread(() => {ButtonColor(randomGetal);}));
};
});
lblRandom1.Text = Lijst.Count.ToString();
}

public void ClearButton()
{
btnA.SetTitleColor (UIColor.Green, UIControlState.Normal);
btnB.SetTitleColor (UIColor.Green, UIControlState.Normal);
btnC.SetTitleColor (UIColor.Green, UIControlState.Normal);
btnD.SetTitleColor (UIColor.Green, UIControlState.Normal);
}

public void ButtonColor(string a)
{

if (a == "A") {
btnA.SetTitleColor (UIColor.Magenta, UIControlState.Normal);
Thread.Sleep(2000);
ClearButton ();
}

if (a == "B") {
btnB.SetTitleColor (UIColor.Magenta, UIControlState.Normal);
Thread.Sleep(2000);
ClearButton ();
}

if (a == "C") {
btnC.SetTitleColor (UIColor.Magenta, UIControlState.Normal);
Thread.Sleep(2000);
ClearButton ();
}

if (a == "D") {
btnD.SetTitleColor (UIColor.Magenta, UIControlState.Normal);
Thread.Sleep(2000);
ClearButton ();
}
}

public string randomizer()
{
int randomNummer = random.Next (0, 4);
if (randomNummer == 0)
return "A";
if (randomNummer == 1)
return "B";
if (randomNummer == 2)
return "C";
if (randomNummer == 3)
return "D";
else
return "Empty";
}

}

public class Opslag
{
public int nummerGetal {get;set;
}

public string getal {
get;
set;
}

}

}

最佳答案

我在Xamarin Android上也遇到了类似的问题。 Thread.Sleep()无法正常工作:
-都不来自System.Threading.Thread.Sleep()-也不来自Java.Lang.Thread.Sleep()
花了2小时试图解决问题。
找到above answer,但由于有点复杂,因此决定提炼核心问题。

解决方案

替换“基于线程”的 sleep ,如下所示:

DoSth() {
Thread newThread = new Thread(new ThreadStart(DoWork));
newThread.Start();
}

void DoWork() {
Thread.Sleep(5000);
// do sth after 5 secs
}

使用“基于异步”的方法:
DoSth() {
DoWorkAsync();
}

async void DoWorkAsync() {
await Task.Delay(5000);
// do sth after 5 secs
}

顺便提一句。仅在应用启动后的开始阶段才会出现问题。

关于c# - Xamarin iOS Sleep UI线程不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582714/

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