我想实时显示(例如每1秒更新一次)某些温度到我的程序界面。
要做到这一点,我相信我需要在后台工作程序中运行一些代码,这样主程序就不会被阻止。我的问题是,是否可以从后台工作者设置TextBlock
的文本,如果是,则如何进行。
这是基本的想法:
backgroundworker
{
while(true)
{
//reading and updating temperatures
//.....
}
}
答案 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的代码。