0

我有以下代码:

StatusLabel.Content = "Copying files...";

AutoCopy();

StatusLabel.Content = "Finished";

上面的代码是一个按钮单击,当我单击按钮时,我希望看到一个带有“正在复制文件...”的标签,然后它将通过 AutoCopy 方法复制文件,然后是带有“完成”的标签

我没有看到“正在复制文件”。我所看到的只是屏幕冻结,然后用“完成”解冻。

如何获得“正在复制文件以显示...”并且只有在 AutoCopy() 完成后,我才想显示“完成”;

4

1 回答 1

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";
}
于 2013-04-22T18:00:55.833 回答