我想不断刷新我的表单以更新表单上显示的信息。并且不想程序崩溃。当我在网上寻找答案时,当我得到答案时,我不得不使用一个函数“Control.Invoke”。在那之后我写了以下代码。
private void Form1_Load(object sender, EventArgs e)
{
Thread Data = new Thread(RefreshData) { IsBackground = true };
Data.Start();
}
void RefreshData()
{
while (true)
{
//...rewrite all data display on form
this.Invoke((MethodInvoker)delegate { this.Refresh(); });
Thread.Sleep(33);
}
}
这是使用invoke函数的正确方法吗?
1条答案
按热度按时间xxb16uws1#
是的,您可以这样使用
Invoke
,但是我建议您避免手动创建线程。相反,可以使用较新的
async
和Task.Run
特性。您也可以使用更短的语法编写匿名lambda,尽管它的结果是一样的。另一种选择是允许任务调度程序将延续封送回UI线程。