1

私の Windows 8 アプリでは、現在の時刻を TextBlock 要素に表示したいと考えています。時間の値は毎秒更新する必要があります。次のコードは問題なく動作しますが、理想的なソリューションではないと思います。これを行うためのより良い方法はありますか?

public class Clock : Common.BindableBase {
    private string _time;
    public string Time {
        get { return _time; }
        set { SetProperty<string>(ref _time, value); }
    }
}

private void startPeriodicTimer() {
    if (PeriodicTimer == null) {
        TimeSpan period = TimeSpan.FromSeconds(1);

        PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer((source) => {

            Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                () => {
                    DateTime time = DateTime.Now;
                    clock.Time = string.Format("{0:HH:mm:ss tt}", time);
                    [...]
                });

        }, period);
    }
}

LoadState メソッドでは:

clock = new Clock();
clock.Time = string.Format("{0:HH:mm:ss tt}", DateTime.Now);
currentTime.DataContext = clock;
startPeriodicTimer();
4

3 に答える 3

0

WinRT にはDispatcherTimerクラスがあります。あなたはそれを使用することができます。

XAML

<Page.Resources>
    <local:Ticker x:Key="ticker" />
</Page.Resources>

<TextBlock Text="{Binding Source={StaticResource ticker}, Path=Now}" FontSize="20"/>

C#

public class Ticker : INotifyPropertyChanged
{
    public Ticker()
    {
        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(1);
        timer.Tick += timer_Tick;
        timer.Start();
    }

    void timer_Tick(object sender, object e)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs("Now"));
    }

    public string Now
    {
        get { return string.Format("{0:HH:mm:ss tt}", DateTime.Now); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
于 2013-06-19T18:00:52.213 に答える
0

タイマーを使用してアプリケーションで行った方法

        private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            TxtHour.Text = DateTime.Now.ToString("HH:mm:ss");
        }
private void MainWindow_OnLoad(object sender, RoutedEventArgs e)
        {
            System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();
            TxtDate.Text = DateTime.Now.Date.ToShortDateString();
        }
于 2013-06-19T17:32:44.717 に答える