You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android实现类Human Benchmark功能遇时间转换及按钮变色问题

解决Xamarin Android中按钮随机延迟变色及时长处理问题

嘿,我来帮你搞定这两个问题!先看看你代码里的核心问题,再一步步调整实现你想要的功能:

你的代码里的关键问题

你当前的代码逻辑有两个明显的问题:

  1. 计时逻辑错误:你刚给startTime1赋值就立刻计算timeElapsed,这时候流逝的时间几乎为0,永远不可能等于随机生成的seconds,所以按钮永远不会变绿。
  2. 没有等待逻辑:你需要让程序等待随机的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:09:08