信息标签

时间:2010-02-19 15:29:31

标签: c# winforms label

我正在尝试创建一个应该显示应用程序正在执行的事件的信息标签。

删除数据,读取数据,写入数据,连接到db。等。

我在表单中添加了一个标签,我正在为每个操作更改其text属性,如:

label1.Text = "stored procedure is being executed..";

但是,在运行时,标签的文本不会改变。我试过添加方法

Application.DoEvents();

到每个地方我都改变了标签的文字属性。它工作正常。但它看起来很傻。所以我试图将这个方法添加到我的标签的“TextChanged”事件中。但它不起作用! 难道我做错了什么?或者,

有没有有效的方法来制作信息标签?

3 个答案:

答案 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: - )