简体   繁体   English

如何在WPF中获取数字以在屏幕上向前计数?

[英]How can I get a number to count forward on the screen in WPF?

All I wanted to do was show my 5-year-old daughter how a number can count forward on the screen. 我要做的就是向我5岁的女儿展示如何在屏幕上计算数字

This waits 135 seconds and then displays "135". 这将等待135秒,然后显示“ 135”。

What do I have to change so that it displays the number as it counts? 我必须更改什么才能显示计数的数字?

XAML: XAML:

<Window x:Class="TestCount234.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="768" Width="1024">
    <StackPanel>
        <TextBlock
            HorizontalAlignment="Center"
            FontSize="444" x:Name="TheNumber"/>
    </StackPanel>
</Window>

Code Behind: 背后的代码:

using System.Windows;
using System.Threading;

namespace TestCount234
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            Loaded += new RoutedEventHandler(Window1_Loaded);
        }

        void Window1_Loaded(object sender, RoutedEventArgs e)
        {
            for (int i = 0; i <= 135; i++)
            {
                TheNumber.Text = i.ToString();
                Thread.Sleep(1000);
            }
        }
    }
}

For a quickie project like this, you could use a timer: 对于这样的快速项目,可以使用计时器:

private DispatcherTimer timer;
private int count = 0;

public Window1()
{
    InitializeComponent();
    this.timer = new DispatcherTimer();
    this.timer.Interval = TimeSpan.FromSeconds(1);
    this.timer.Tick += new EventHandler(timer_Tick);
    this.timer.Start();
}

void timer_Tick(object sender, EventArgs e)
{
    this.textBox1.Text = (++count).ToString();
}

If you want the UI to update (and stay responsive) while your task is running, you need to use a separate thread, for example by using a BackgroundWorker . 如果您希望在任务运行时UI更新(并保持响应),则需要使用单独的线程,例如,使用BackgroundWorker

Here's an example of how it works: 这是它如何工作的示例:

BackgroundWorker _backgroundWorker = new BackgroundWorker();

...

// Set up the Background Worker Events
_backgroundWorker.DoWork += _backgroundWorker_DoWork;
backgroundWorker.RunWorkerCompleted += 
    _backgroundWorker_RunWorkerCompleted;

// Run the Background Worker
_backgroundWorker.RunWorkerAsync(5000);

...

// Worker Method
void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    // Do something
}

// Completed Method
void _backgroundWorker_RunWorkerCompleted(
    object sender, 
    RunWorkerCompletedEventArgs e)
{
    if (e.Cancelled)
    {
        statusText.Text = "Cancelled";
    }
    else if (e.Error != null) 
    {
        statusText.Text = "Exception Thrown";
    }
    else 
    {
        statusText.Text = "Completed";
    }
}

You can read a lot more about it here. 您可以在此处了解更多信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM