Xamarin Android实现类Human Benchmark功能遇时间转换及按钮变色问题
解决Xamarin Android中按钮随机延迟变色及时长处理问题
嘿,我来帮你搞定这两个问题!先看看你代码里的核心问题,再一步步调整实现你想要的功能:
你的代码里的关键问题
你当前的代码逻辑有两个明显的问题:
- 计时逻辑错误:你刚给
startTime1赋值就立刻计算timeElapsed,这时候流逝的时间几乎为0,永远不可能等于随机生成的seconds,所以按钮永远不会变绿。 - 没有等待逻辑:你需要让程序等待随机的1-10秒后再执行变色操作,而不是瞬间判断。
修正后的代码实现
我们可以用async/await结合Task.Delay来实现异步等待,同时正确处理时间转换:
// 把方法改成async,因为要使用await关键字 private async void AfterClicked() { // 点击后先把按钮设为红色 ScreenClickButton.SetBackgroundColor(Android.Graphics.Color.Red); // 生成1-10秒的随机时长,转成毫秒(Task.Delay接受毫秒参数) Random rnd = new Random(); int delayMilliseconds = rnd.Next(1, 11) * 1000; // 异步等待指定时长,不会阻塞UI线程 await Task.Delay(delayMilliseconds); // 等待结束后把按钮设为绿色 ScreenClickButton.SetBackgroundColor(Android.Graphics.Color.Green); }
关于“时长转整数”的补充说明
如果你之后需要计算用户的反应时间(比如按钮变绿后到用户再次点击的时间差),可以这样处理时长转整数:
- 记录按钮变绿的时间:
DateTime greenTime = DateTime.Now; - 用户再次点击时计算时间差:
TimeSpan reactionTime = DateTime.Now - greenTime; - 转成整数秒(取整数部分):
int secondsElapsed = (int)reactionTime.TotalSeconds; - 或者转成整数毫秒:
int millisecondsElapsed = (int)reactionTime.TotalMilliseconds;
这样就能精准获取流逝的时长并转成整数啦!
内容的提问来源于stack exchange,提问作者Rectinho
相关产品推荐
相关产品推荐

