C# 按钮。表单可见后,文本正在更改

C# 按钮。表单可见后,文本正在更改,c#,winforms,C#,Winforms,我有一个加载表单的按钮,因为它从数据库获取大量数据,需要几秒钟,我想建议用户等待 单击按钮时,按钮文本不会更改 这是我正在使用的按钮单击代码: private void btnItemConfigForm_Click(object sender, EventArgs e) { var itemConfigBtnText = btnItemConfigForm.Text; btnItemConfigForm.T

我有一个加载表单的按钮,因为它从数据库获取大量数据,需要几秒钟,我想建议用户等待

单击按钮时,按钮文本不会更改

这是我正在使用的按钮单击代码:

private void btnItemConfigForm_Click(object sender, EventArgs e)
            {
                var itemConfigBtnText = btnItemConfigForm.Text;
                btnItemConfigForm.Text = "Waiting...";

                ItemConfigForm form = new ItemConfigForm();
                form.Show();

                if (form.Created)
                {
                    btnItemConfigForm.Text = itemConfigBtnText;
                }
            }
如果我不加评论

if (form.Created)
{
    btnItemConfigForm.Text = itemConfigBtnText;
}
在新表单窗口可见后,按钮文本变为等待

在窗体窗口可见之前,我缺少什么来更改按钮文本。

添加

  btnItemConfigForm.Update();


这将在开始初始化和显示表单之前更新按钮控件。

简单的解决方案是添加此行:

btnItemConfigForm.Refresh();
在这一排之后

btnItemConfigForm.Text = "Waiting...";
否则,只有在函数结束时按钮的文本才会更改,此函数将重新绘制表单显示

附言。 如果您希望表单不会被阻止-您可以在异步运行中使用函数“Show”(或New),那么您将需要事件来通知第一个表单何时加载表单


对不起,我的英语…:)

你问错问题了。正确的问题应该是“如何在后台加载数据库条目,这样我的UI线程就不会阻塞,消息也不会一直被处理?”。请参阅以获取解释。这或多或少是一个副本。@Casper不,不,不。。。不要链接到该Visual Basic方法。另请参见.Cheers@CodeCaster I将避免应用程序。DoEventsUI几乎是一个datagridview,没有数据就毫无用处,所以不要介意它阻塞UIC。使用control.Update()和control.Refresh()有什么区别吗?@PeterCampbell你说得对,control.Update()更好。我认为control.Refresh()会重新绘制自己和所有子控件,但是control.Update()只会重新绘制更改的内容
btnItemConfigForm.Text = "Waiting...";