在一个应用程序中,往往存在两种线程:UI线程和工作线程。
UI线程有窗口,创建窗口的控件,且有消息队列对窗口和控件的消息进行管理。主要处理和UI相关的逻辑。
工作线程主要处理和业务相关的比较复杂的逻辑,当处理好之后有可能会调用UI线程中的控 件将结果在UI界面上展现出来。
那么到这里,就出现了跨线程调用UI控件方法的问题。在工作线程中可以直接调用UI上的控件的方法吗?显然不行。代码能编译,在运行时会报错。
怎么解决这个问题呢?
每个控件都有一个属性:InvokeRequired,该属性值为true的场合,表示:调用方是跨线程调用该控件,那么就需要调用该控件的invoke方法执行相关方法来实现逻辑。该属性值为false的场合,表示调用方为UI线程,那么可以直接调用控件方法或者改变该控件的属性值。
例:文章来源:https://www.toymoban.com/news/detail-717178.html
if (textBox.InvokeRequired)
{
textBox.Invoke(new Action<string>(str =>
{
textBox.Text += str;
}), logStr);
}
else
{
textBox.Text += logStr;
}
文章来源地址https://www.toymoban.com/news/detail-717178.html
到了这里,关于c# 跨线程访问UI控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!