如何从后台工作者将文本设置为TextBlock

时间:2013-06-14 17:16:12

标签: c# windows-phone-8 backgroundworker

我想实时显示(例如每1秒更新一次)某些温度到我的程序界面。

要做到这一点,我相信我需要在后台工作程序中运行一些代码,这样主程序就不会被阻止。我的问题是,是否可以从后台工作者设置TextBlock的文本,如果是,则如何进行。

这是基本的想法:

backgroundworker
{
     while(true)
     {
           //reading and updating temperatures
           //.....
     }
}

1 个答案:

答案 0 :(得分:5)

BackgroundWorker已经内置支持报告当前的工作进度,这听起来就像你正在做的那样:

var worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;

worker.DoWork += (s, args) =>
{
    while (true)
    {
        Thread.Sleep(1000);//placehodler for real work
        worker.ReportProgress(0, "Still working");
    }
};

worker.ProgressChanged += (s, args) =>
{
    textBox1.Text = args.UserState as string;
};

worker.RunWorkerAsync();

通过利用内置支持,您可以让后台工作程序处理到UI线程的编组。 (它将确保除DoWork之外的所有事件都在UI线程中运行。)

这也具有将UI逻辑与业务逻辑分离的优势,而不是在整个业务工作代码中嵌入用于操作UI的代码。