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