0

次のコードがあります。

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

AutoCopy();

StatusLabel.Content = "Finished";

上記のコードはボタンのクリックであり、ボタンをクリックすると、「ファイルをコピーしています...」というラベルが表示され、AutoCopy メソッドを介してファイルがコピーされ、「Finished」というラベルが表示されます。

「ファイルのコピー」が表示されません。私が見るのは、画面がフリーズし、「完了」でフリーズが解除されることだけです。

「表示するファイルをコピーしています...」を取得するにはどうすればよいですか? 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 に答える