更改另一个表单的标签文本

时间:2015-11-03 21:14:31

标签: c# .net winforms

美好的一天, 我的表单代码中有很多方法需要很长时间。我想在另一个表单上显示一条消息(使用label)来告知用户正在发生的事情,因此他们不会认为程序没有响应。

我不想使用MessageBox.Show(),因为我想要一个可以更改文本的对象,并在需要时进行处理,而无需用户关闭它。

到目前为止,我有这样的事情:以我的主要形式:

private void Foo()
{
    Form2 infoPopup = new Form2();
    infoPopup.setText("running function1");
    infoPopup.Show();
    slowFunction1();
    infoPopup.setText("running function2");
    slowFunction2();
    infoPopup.Dispose();
}

正如您可能猜到的,在表单2中我有一个这样的函数:

private void setText(string message)
{
   this.label1.Text=message;
}

不幸的是,此解决方案仅部分有效。我确实收到form2弹出消息,但form2中标签的内容不会改变。

由于

1 个答案:

答案 0 :(得分:1)

当您的应用程序繁忙时,重绘控件不是优先事项。因此,除非您的代码在工作线程中运行,否则UI将无法更新。

您可以强制进行更新。控件和表单都有Update()方法。它强制对象重绘自己。

根据您的具体情况,您可能还需要研究Invalidate()Refresh()方法。