我有以下代码:
StatusLabel.Content = "Copying files...";
AutoCopy();
StatusLabel.Content = "Finished";
上面的代码是一个按钮点击,当我点击按钮时,我希望看到一个带有“复制文件...”的标签,然后它会通过AutoCopy方法复制文件,然后标签带有“Finished”< / p>
我没有看到“复制文件”。我只看到屏幕冻结,然后解冻“完成”。
如何获取“复制要显示的文件...”并且只有在AutoCopy()完成后,我是否要显示“已完成”;
答案 0 :(得分:2)
正如大家所说,在文件复制操作期间,您的UI(主)线程被阻止。
您需要分离一个在后台执行所有操作的工作线程。
警告:多线程只会增加复杂性。
{
...
System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunWorkerCompleted);
StatusLabel.Content = "Copying files...";
bw.RunWorkerAsync();
...
}
private void DoWork(object sender, DoWorkEventArgs e)
{
AutoCopy();
}
private void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
StatusLabel.Content = "Finished";
}