private void buttonSave_Click(object sender, EventArgs e)
{
textBox1.Text = "DATA is being copied.";
//my own function to cpy files, working properly
copyDirectory(sourceFolderPath, destFolderPath);
}
复制需要3秒钟,但我看不到带有text =“DATA正在被复制的TextBox。在进入copyDirectory函数之前”,它只在完成复制后更新文本框,问题是什么?我没有在复制中使用另一个线程。
答案 0 :(得分:6)
这是因为Windows Forms处理事件的方式。 Windows窗体同步执行所有事件。这意味着当单击一个按钮时,所有附加事件中的所有代码都会在其他任何事件发生之前执行。
这意味着在复制完成之前(即方法返回),文本框将不会被明显更新。
有几个修复方法。一个解决方法是让按钮单击启动计时器,该计时器在100毫秒后执行。然后当计时器执行时,执行复制。
另一个(我的首选)是在Task:
中执行copyDirectory方法Task.Factory.StartNew(() => copyDirectory(sourceFolderPath, destFolderPath))
注意:这意味着代码在不同的线程上运行,因此如果您想更新文本框以说“完成!”之类的话。当它完成后,你需要这样做
Invoke(new Action(() => textbox.Text = "Completed!");