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

spa*_*opt 1 c# backgroundworker windows-phone-8

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

为此,我相信我将需要在后台工作程序中运行一些代码,以便主程序不会被阻止.我的问题是,是否可以设置TextBlock背景工作者的文本,如果可以,则如何设置.

这是基本的想法:

backgroundworker
{
     while(true)
     {
           //reading and updating temperatures
           //.....
     }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 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();
Run Code Online (Sandbox Code Playgroud)

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

这还具有将UI逻辑与业务逻辑分离的优点,而不是嵌入用于在执行业务工作的代码中操纵UI的代码.