【问题标题】:C# - Update UI on Timer tick while delaying based on Timer valueC# - 在基于 Timer 值延迟的同时更新 Timer 滴答的 UI
【发布时间】:2018-01-20 07:12:42
【问题描述】:

我希望我的 WPF 应用程序在显示图像之前显示 3 秒倒计时,使用计时器根据经过的三秒显示“3、2、1”计数(意味着使用计时器更新 UI)等待显示图像,直到三秒钟过去(意味着让方法等待)。

在伪代码中,我正在尝试执行以下操作:

  • 显示 3,然后过了一秒
  • 显示 2,然后过了一秒
  • 显示 1,然后过了一秒
  • 图像显示

我正在尝试使用 System.Timers.Timer,例如:

...

public int Countdown = 3;

...

private void UpdateCountdown(object source, EventArgs e) 
{
    Countdown--;
}

public void DoStuff()
{
    Timer timer = new Timer();
    timer.Interval = 1000;
    timer.Elapsed += UpdateCountdown;
    timer.Start();

    while (Countdown > 0)
    {
        // do not act until the 3 seconds have elapsed
    }

    // now that 3 seconds have elapsed...
    ShowImage();
}

在我的 xaml 中,我将 Countdown 值绑定到 TextBlock:

<TextBlock Name="TbCountdown" Text="{Binding Path=Countdown}"/>

我尝试了一些不同的方法,例如尝试 Dispatcher.Invoke。我的问题是总是会发生以下两种情况之一:

  1. UI 被阻止,不显示 3 变成 2,等等。
  2. UI 正确显示 3、2、1,但 ShowImage() 方法不会等待 3 秒,它会立即发生。

有什么建议吗?

【问题讨论】:

  • 你为什么不用ajax和Jquery?
  • 一旦时间完成,调用 ajax 方法并在 div 或任何你想显示的地方显示图像
  • @nikunjMnage Ajax 和 jQuery 与桌面 WPF 应用程序有什么关系?

标签: c# wpf timer


【解决方案1】:

不要忙于旋转DoStuff 中的Countdown 值,而是将测试和ShowImage() 放入UpdateCountdown 处理程序中。

private void UpdateCountdown(object source, EventArgs e) 
{
    if (--Countdown == 0)
        ShowImage();
}

public void DoStuff()
{
    Timer timer = new Timer();
    timer.Interval = 1000;
    timer.Elapsed += UpdateCountdown;
    timer.Start();    
}

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多