【发布时间】:2014-07-02 13:30:36
【问题描述】:
我正在尝试更新后台工作人员表单上的一组标签。这是我的代码:
for (int i = 0; i < 6; i++)
{
if (this.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate
{
arrLabel[i].Text = values[i].ToString();
});
}
else
{
arrLabel[i].Text = values[i].ToString();
}
}
这不起作用,但如果我尝试更改每个标签的文本属性而不是数组,它会起作用。我怎样才能解决这个问题?还有比我为表单上的每个控件所做的更新来自后台工作人员的表单控件的更短/更好的方法吗?
编辑:这是我定义数组的方式:
private Label[] arrLabel = new Label[6];
这是我调用来分配数组的函数:
private void makeLabelArrays()
{
for (int i = 0; i < 6; i++)
{
arrLabel[i] = (Label)Groupbox1.Controls["label" + (i + 1).ToString()];
}
}
【问题讨论】:
-
你试过用列表代替数组吗?
-
一般来说,如果您在 BThread 中更新表单控件,则会发生跨线程,您可以声明一个委托并通过调用来执行此操作
-
描述更多关于你的场景以检查你是否可以在计时器中实现这一点
-
@GrantWinney:我喜欢你的想法,但是 values[i] 数组是来自硬件的值。是否可以使用 ProgressChanged 使用这些值更新标签?还是只是为了更新进度?
-
@GrantWinney:是的,请发布一个示例。谢谢。
标签: c# backgroundworker invokerequired