0

ファイルを移動します

foreach(file){
file.move(file,dst);}

各ファイルが移動された後 (異なるパーティション)、進行状況に関する情報でフォームを更新したいと考えています。残念ながら、私の WPF フォームは、コピー/移動キュー全体でビジーです。ファイルの移動中 (または移動後) に GUI の応答性を確保するにはどうすればよいですか?

4

2 に答える 2

2

Kasan さん、BackgroundWorker が役に立つと思います。タスクは良い方法ですが、タスクから UI の進行状況を更新するには、イベントを UI スレッドにディスパッチする必要があります。そうしないと、UI 以外のスレッドから UI を更新することが許可されていないため、例外が発生します。ここにサンプルとドキュメントへのリンクがあります

 public partial class MainWindow : Window
{
    BackgroundWorker _worker = new BackgroundWorker();
    public MainWindow()
    {
        InitializeComponent();
        _worker = new BackgroundWorker();
        _worker.DoWork += worker_DoWork;
        _worker.ProgressChanged += worker_ProgressChanged;
    }

    void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progress1.Value = e.ProgressPercentage;
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        _worker.RunWorkerAsync();
    }

    void worker_DoWork(object sender, DoWorkEventArgs e)
    {
        var files = new List<string>();
        foreach(var file in files)
        {
            File.Move(file, /*target*/);
            _worker.ReportProgress(/* here is progress from 0 to 100 */)
        }
    }
}

BackgroundWorker サンプル

于 2013-11-03T13:24:31.787 に答える