方法完成后才设置标签;

时间:2013-04-22 17:44:07

标签: c# wpf c#-4.0

我有以下代码:

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

AutoCopy();

StatusLabel.Content = "Finished";

上面的代码是一个按钮点击,当我点击按钮时,我希望看到一个带有“复制文件...”的标签,然后它会通过AutoCopy方法复制文件,然后标签带有“Finished”< / p>

我没有看到“复制文件”。我只看到屏幕冻结,然后解冻“完成”。

如何获取“复制要显示的文件...”并且只有在AutoCopy()完成后,我是否要显示“已完成”;

1 个答案:

答案 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";
}