【问题标题】:Xamarin Forms Timer Doesn't Show Run Code Before TimerXamarin Forms Timer 在计时器之前不显示运行代码
【发布时间】:2020-06-19 10:51:05
【问题描述】:

谁能告诉我为什么这段代码不起作用?

enter image description here

Random rnd = new Random();

    public PlayGame()
    {
        InitializeComponent();
        Stopwatch stopwatch = Stopwatch.StartNew();
        BackgroundColor = Color.Blue;
        while (true)
        {
            if (stopwatch.ElapsedMilliseconds >= rnd.Next(1000,5000))
            {
                break;
            }
            System.Threading.Thread.Sleep(1); 
        }

        BackgroundColor = Color.Red;
    }

期望看到的是,新页面的背景颜色是蓝色的,1-5 秒后应该会变成红色。

实际上看到的是,当我点击应该指向这个新页面的按钮时,它不会显示蓝色背景 - 它只是暂停 1 -5 秒并直接变为红色。

有人知道为什么吗?

【问题讨论】:

  • 请发布实际代码而不是屏幕截图。并阅读:How to Ask
  • 现在好点了吗?还有什么我可以改进的 - 我是这个网站的新手。
  • 您希望将页面显示为初始蓝色,5 秒后显示为红色。是吗?
  • 是的,没错。经过 1-5 秒之间的随机时间

标签: c# xamarin xamarin.forms stopwatch


【解决方案1】:

如果您想在 5 秒后将背景颜色从蓝色更改为红色。

 public partial class PlayGame : ContentPage
    {
        public PlayGame ()
        {
            InitializeComponent();
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
            BackgroundColor = Color.Blue;

            Device.StartTimer(TimeSpan.FromSeconds(5), () =>
            {
                BackgroundColor = Color.Red;

                return false; 
            });
        }

    }

【讨论】:

  • 你有什么解释为什么这样有效,为什么原来没有?
  • 我认为它直接在你的代码中初始化了计时器。
  • 问题都是关于为什么现有代码不起作用。 OP 没有要求工作代码。你能解释一下原始代码有什么问题吗?
  • 对此我没有适当的解释。但我提出了一个替代解决方案。就是这样。
猜你喜欢
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2019-02-04
相关资源
最近更新 更多