我正在尝试创建一个应该显示应用程序正在执行的事件的信息标签。
删除数据,读取数据,写入数据,连接到db。等。
我在表单中添加了一个标签,我正在为每个操作更改其text属性,如:
label1.Text = "stored procedure is being executed..";
但是,在运行时,标签的文本不会改变。我试过添加方法
Application.DoEvents();
到每个地方我都改变了标签的文字属性。它工作正常。但它看起来很傻。所以我试图将这个方法添加到我的标签的“TextChanged”事件中。但它不起作用! 难道我做错了什么?或者,
有没有有效的方法来制作信息标签?
答案 0 :(得分:2)
你应该使用BackgroundWorker;处理ProgressChanged Event;并在ReportProgress处理程序中调用DoWork。使用此方法,您可以避免跨线程异常。
答案 1 :(得分:1)
也许设置标签文本是在一个单独的线程中发生的,而不是标签所在的?代表可以解决这个问题。
public void setLabelText(string value)
{
if (InvokeRequired)
Invoke(new SetTextDelegate(setLabelText), value);
else
label1.Text = value;
}
delegate void SetTextDelegate(string value);
每当您想要更新标签的文本时,您都可以调用setLabelText方法。
答案 2 :(得分:1)
如果问题与线程相关,那么您将获得例外。
应用程序没有更新UI更新,因为它忙着做其他事情,比如点击数据库。
从表单上的简单方法开始,如下所示:
private void SetStatus(string status)
{
label1.Text = status;
Application.DoEvents();
}
然后,您只需在代码中调用SetStatus("executing...")
等。
如果你做了踩踏的东西,你需要使用@Aaron提到的调用方法
背景工作者的建议也很好,但如果上述工作你可能不需要它,工人会让事情变得更有趣!
PK: - )