0

我要做的是显示“请稍候..”来代替将使用与远程数据库的连接获取并显示在表单上的值。在此过程中,我编写了一个简单的代码,如下所示:

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

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

我知道,因为我没有使用线程,所以 UI 会卡住,但尽管如此,是什么导致标签在卡住之前没有改变?

4

2 回答 2

2

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

尝试这个:

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

但我必须说,在 UI 线程中执行阻塞操作是一个坏习惯。(因为您请求处理来自事件处理程序的事件)

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

最好在工作线程上执行数据库操作或使用.NET 4.5的asyncand模式await

于 2013-11-05T12:12:17.033 回答
2

如果你添加

this.Refresh();

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

于 2013-11-05T12:13:03.017 回答