【问题标题】:wp8.x and windows 8 timer issueswp8.x 和 windows 8 计时器问题
【发布时间】:2014-05-30 17:29:29
【问题描述】:

我正在开发一个简单的测验应用程序,我在其中使用组合或计时器和秒表显示经过的时间。但是定时器并不可靠,它会在几秒钟后停止更新,或者更新缓慢并延迟。

private void StartChallenge()
    {
        LoadQuestion();
        System.Threading.Timer t = new System.Threading.Timer(new System.Threading.TimerCallback(updateTime), null, 0, 1000); //start timer immediately and keep updating it after a second
        stopWatch = new System.Diagnostics.Stopwatch();
        stopWatch.Start();
    }

    private async void updateTime(object state)
    {
        TimeSpan ts = stopWatch.Elapsed;
        await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => txtTimeElapsed.Text = String.Format("{0:00}:{1:00}:{2:00} elapsed", ts.Hours, ts.Minutes, ts.Seconds));
    }

上面的代码有什么问题吗?但我没有看到计时器在应用程序中可靠地工作。

任何人都遇到过类似的问题。是否还有其他可以用于 UI 的计时器。

谢谢

【问题讨论】:

  • 尝试将 this.Dispatcher.RunAsync() 保存到局部变量中,等待该变量并检查任务中是否有异常属性。
  • 计时器正在收集垃圾。您需要在类的字段中存储对它的引用,局部变量不够好。
  • 所以你的意思是说 Timer t 应该是一个类变量?

标签: c# windows-phone-8 windows-8 windows-8.1 windows-phone-8.1


【解决方案1】:

要在 Windows 运行时更新 UI,您应该使用 DispatcherTimer - 它在 UI 线程上打勾:

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.ui.xaml.dispatchertimer.aspx

Stopwatch sw;
DispatcherTimer timer;

public MainPage()
{
    this.InitializeComponent();

    this.NavigationCacheMode = NavigationCacheMode.Required;

    sw = new Stopwatch();
    timer = new DispatcherTimer();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    sw.Start();

    timer.Interval = TimeSpan.FromSeconds(1);
    timer.Tick += (i, j) => { txtBlock.Text = sw.Elapsed.ToString(); };
    timer.Start();    
}

【讨论】:

  • 看起来这是一个解决方案,我会给它一天的测试并回复你。
【解决方案2】:

你可以试试这个。它会以一秒的间隔更新计时器并更新TimerTextBlock

public void LoadTimer()
{
    int sec = 0;
    Timer timer = new Timer((obj) =>
    {
        Dispatcher pageDispatcher = obj as Dispatcher;

        pageDispatcher.BeginInvoke(() =>
        {
            sec++;
            TimerTextBlock.Text = sec.ToString();
        });

    }, this.Dispatcher, 1000, 1000);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    相关资源
    最近更新 更多