我要做的是显示'Please wait ..'代替将使用与远程数据库的连接在表单上获取和显示的值。在这个过程中,我写了一个简单的代码作为如下:
private void button1_Click(object sender, EventArgs e)
{
c.Text = "Please wait...";
SqlCommand cmd1 = new SqlCommand();
.
.
.
.
}
我调试了代码并发现更改了行c.Text
,但不知何故表单被冻结,只有在建立连接,运行查询并获取数据后才会更改。
据我所知,由于我没有使用线程,因此UI会卡住,但尽管如此,导致标签在卡住之前不会发生变化?
答案 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的async
和await
模式
答案 1 :(得分:2)
如果你添加
this.Refresh();
设置文本后,它会使表单无效并更新它。