C# - 代码处理顺序 - 奇怪的行为

标签 c# winforms

我有以下按钮点击事件:

private void btnRun_Click(object sender, EventArgs e)
    {
        label1.Visible = true;

        if (SelectDatabase())
        {
            if (string.IsNullOrEmpty(txtFolderAddress.Text))
                MessageBox.Show("Please select a folder to begin the search.");
            else
            {

                if (cbRecurse.Checked == false || Directory.GetDirectories(initialDirectory).Length == 0)
                {
                    CheckSingleFolder();
                }
                else
                {
                    CheckSingleFolder();
                    directoryRecurse(initialDirectory);
                }

                                }
        }


    }

实际上,它会进行一些检查,然后开始一些目录递归以查找特定文件。但是,使标签可见的第一行代码直到目录被递归之后才会出现?有人知道为什么会这样吗?

谢谢。

最佳答案

您在 UI 线程中执行所有操作,这是一个非常糟糕的主意 - 在您完成之前,UI 不会更新、对事件使用react等。

您应该使用后台线程并使用 Control.BeginInvoke 更新 UI 等进度,或者使用 BackgroundWorker .

基本上,WinForms 中有两条黄金法则(与 WPF/Silverlight 类似):

  • 不要在 UI 线程中做任何会占用大量时间的事情
  • 不要触及 UI 线程以外的任何线程的任何 UI 元素

关于C# - 代码处理顺序 - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5539314/

相关文章:

c# - 在函数参数中使用多个谓词?

c# - ASP.Net MVC SQL 格式化 HTML

c# - DataGridView - 通过单击列标题对通用列表进行排序

winforms - 如何配置适用于 Azure 的 CSLA WCF 数据门户?

wpf - Windows 窗体死了。 WPF的长生命周期

使用模板化类型的 C# 模式匹配

c# - 在线查看 .rdl 文件

c# - 滚动时在 Panel 中平滑绘制或绘制子控件

c# - 在没有警告的情况下使用 ClosedXML 将 Gridview 导出到 Excel : the file you are trying to open is in a different format

c# - 限制向 ToolStrip 添加控件