Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该为此使用后台工作程序吗?_C#_Multithreading_Windows Phone 7 - Fatal编程技术网

C# 我应该为此使用后台工作程序吗?

C# 我应该为此使用后台工作程序吗?,c#,multithreading,windows-phone-7,C#,Multithreading,Windows Phone 7,我正在构建一个WindowsPhone7应用程序,我的视图上有一个刷新按钮。我还有一个标签,上面写着上次刷新视图的时间 我想每分钟更新一次标签,但不确定要使用什么?我应该使用普通线程还是后台工作线程 在wp7中,我从未涉足过太多线程。也没有。在经过一段时间间隔后,使用计时器定期执行操作。您可以使用Dispatchermer每分钟调用一个DoStuff方法,并使用当前时间更新标签内容 using System; using Microsoft.Phone.Controls; using Sys

我正在构建一个WindowsPhone7应用程序,我的视图上有一个刷新按钮。我还有一个标签,上面写着上次刷新视图的时间

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


在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中执行调度程序并导航回另一个表单,怎么样。停止计时器的最好方法是什么?