我应该使用后台工作者吗?

时间:2014-02-05 22:02:55

标签: c# multithreading windows-phone-7

我正在构建一个Windows Phone 7应用程序,我的视图上有一个刷新按钮。我还有一个标签说明最后一次刷新视图。

我想每分钟更新一次标签,但不确定要使用什么?我应该使用常规线程还是后台工作者?

我从来没有在wp7中涉及过多的线程。

3 个答案:

答案 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方法上创建一个后台工作程序。