我有以下按钮点击事件:
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/