美好的一天,
我的表单代码中有很多方法需要很长时间。我想在另一个表单上显示一条消息(使用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
中标签的内容不会改变。
由于
答案 0 :(得分:1)
当您的应用程序繁忙时,重绘控件不是优先事项。因此,除非您的代码在工作线程中运行,否则UI将无法更新。
您可以强制进行更新。控件和表单都有Update()
方法。它强制对象重绘自己。
根据您的具体情况,您可能还需要研究Invalidate()
和Refresh()
方法。