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

Dar*_*ung 6 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);
                }

                                }
        }


    }
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Jon*_*eet 8

你正在UI线程中做所有事情,这是一个非常糟糕的主意 - UI不会更新,对事件做出反应等等,直到你完成.

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

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

  • 不要做任何可能在UI线程中花费大量时间的事情
  • 不要从任何线程接触任何UI元素其他比UI线程