我正在构建一个Windows Phone 7应用程序,我的视图上有一个刷新按钮。我还有一个标签说明最后一次刷新视图。
我想每分钟更新一次标签,但不确定要使用什么?我应该使用常规线程还是后台工作者?
我从来没有在wp7中涉及过多的线程。
答案 0 :(得分:1)
都不是。经过一段时间后,使用Timer
定期执行操作。
答案 1 :(得分:1)
我自己没有尝试过,但我认为您应该能够将Microsoft.Bcl.Async
与WP7.1 +一起使用(基于this)。但是,您必须将VS2012 +用于您的项目,VS2010不适用。
然后代码就像下面一样简单,并且将在主UI线程上执行而不会损害UI响应。
async Task UpdateUI(CancellationToken token)
{
var i = 0;
while (true)
{
await TaskEx.Delay(1000, token); // pause for 1s
this.Label.Text = "Updated: " + i++;
}
}
答案 2 :(得分:0)
您可以使用DispatcherTimer每分钟调用一次DoStuff方法,并使用当前时间更新标签内容。
using System;
using Microsoft.Phone.Controls;
using System.Windows.Threading;
namespace Clock
{
public partial class MainPage : PhoneApplicationPage
{
DispatcherTimer refreshTimer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(60) };
public MainWindow()
{
InitializeComponent();
Loaded += MainPage_Loaded;
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
DoStuff();
this.refreshTimer.Tick += new EventHandler(RefreshTimer_Tick);
refreshTimer.Start();
}
private void RefreshTimer_Tick(object sender, EventArgs e)
{
DoStuff();
}
private void DoStuff()
{
//Do stuff
lastUpdateLabel.Content = DateTime.Now.ToLongTimeString();
}
}
}
所有调用都是在UIThread中进行的,所以如果你需要做很长时间的运行,你仍然需要在DoStuff方法上创建一个后台工作程序。