标签文本在数据库连接之前不会更改

时间:2013-11-05 12:02:33

标签: c# user-interface label

我要做的是显示'Please wait ..'代替将使用与远程数据库的连接在表单上获取和显示的值。在这个过程中,我写了一个简单的代码作为如下:

   private void button1_Click(object sender, EventArgs e)
        {
             c.Text = "Please wait...";
            SqlCommand cmd1 = new SqlCommand();
.
.
.
.
}

我调试了代码并发现更改了行c.Text,但不知何故表单被冻结,只有在建立连接,运行查询并获取数据后才会更改。

据我所知,由于我没有使用线程,因此UI会卡住,但尽管如此,导致标签在卡住之前不会发生变化?

2 个答案:

答案 0 :(得分:2)

c.Text赋值将设置文本,但在onclick处理程序完成后,重绘消息将被处理。

试试这个:

    private void button1_Click(object sender, EventArgs e)
    {
         c.Text = "Please wait...";
         Application.DoEvents();
         SqlCommand cmd1 = new SqlCommand();

但我必须说,在UI线程中执行阻塞操作是不好的习惯。 (因为你要求处理来自事件处理程序的事件)

特别是在这种情况下:因为这种模式会导致无限循环或死锁。

最好在workerthread上执行数据库操作,或者使用.NET 4.5的asyncawait模式

答案 1 :(得分:2)

如果你添加

this.Refresh();

设置文本后,它会使表单无效并更新它。