1

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

为此,我相信我需要在后台工作人员中运行一些代码,这样主程序就不会被阻塞。我的问题是是否可以TextBlock从后台工作人员设置 a 的文本,如果可以,如何设置。

这是基本思想:

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

1 回答 1

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 的代码。

于 2013-06-14T17:30:23.030 回答