C# 我应该为此使用后台工作程序吗?
我正在构建一个WindowsPhone7应用程序,我的视图上有一个刷新按钮。我还有一个标签,上面写着上次刷新视图的时间 我想每分钟更新一次标签,但不确定要使用什么?我应该使用普通线程还是后台工作线程C# 我应该为此使用后台工作程序吗?,c#,multithreading,windows-phone-7,C#,Multithreading,Windows Phone 7,我正在构建一个WindowsPhone7应用程序,我的视图上有一个刷新按钮。我还有一个标签,上面写着上次刷新视图的时间 我想每分钟更新一次标签,但不确定要使用什么?我应该使用普通线程还是后台工作线程 在wp7中,我从未涉足过太多线程。也没有。在经过一段时间间隔后,使用计时器定期执行操作。您可以使用Dispatchermer每分钟调用一个DoStuff方法,并使用当前时间更新标签内容 using System; using Microsoft.Phone.Controls; using Sys
在wp7中,我从未涉足过太多线程。也没有。在经过一段时间间隔后,使用计时器定期执行操作。您可以使用Dispatchermer每分钟调用一个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方法上创建一个后台工作程序。我自己没有尝试过,但我认为您应该能够使用WP7.1+(基于)。但是,您必须在项目中使用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++;
}
}
调度员更具体的地方是通用的吗?@chobo2有许多不同类型的计时器,每种都有不同的优点和缺点。你喜欢哪个就用哪个。有些特定于上下文的计时器值得使用,有些则不值得。您是否有指向这些不同计时器的链接?它到底是WP7还是WP7.5?VS2010或VS2012+?瞄准7.1不确定VS的哪个版本是相关的(我有时在windows 7上使用VS2010,有时在windows 8上使用VS2012)很酷,如果您在ViewModel中执行调度程序并导航回另一个表单,怎么样。停止计时器的最好方法是什么?