作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我倾向于在大多数应用程序的底部使用 StatusStrip 来进行简单的状态更新,偶尔还会使用进度条。
但是,ToolStripStatusLabels 似乎没有从控件继承,因此它们没有 .Invoke 或 .InvokeRequired。那么我将如何线程安全地调用以更改它的文本属性?
为后代和其他来搜索的人编码的答案:
Action<string> test=(text) =>
{
if (this._statusStrip.InvokeRequired) this._statusStrip.Invoke(
new MethodInvoker(() => this._lblStatus.Text = text));
else this._lblStatus.Text = text;
};
private void TestInvoker(string text)
{
if (this._statusStrip.InvokeRequired)
this._statusStrip.Invoke(
new MethodInvoker(() => this._lblStatus.Text = text));
else this._lblStatus.Text = text;
}
最佳答案
这是一个很好的问题!
虽然 ToolStripStatusLabel
不继承自控件,包含 ToolStrip
做!使用包含 ToolStrip
的 Invoke 调用 ToolStripStatusLabel
.
这是因为 ToolStrip 手动处理其组件位的绘制,这与 WPF 管理其所有组件位的绘制非常相似,而不为每个组件生成单独的句柄。这很有用,因为很容易忘记每个 Control
有一个关联的 HANDLE
并且系统只有有限数量的人可以分发,例如。
(我之前也遇到过这个问题。例如,我在 another question 的侧边栏中提到了它。我应该更新该文本以反射(reflect)我最近的理解。)
关于.net - 如何对 ToolStripStatusLabel 进行跨线程调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1127973/
我是一名优秀的程序员,十分优秀!