2017-09-17 3 views
-1
private void Start_Click(object sender, RoutedEventArgs e) 
     { 
      if (listView.Items.Count > 0) 
       worker.RunWorkerAsync(); 
     } 

DoWorkでは、イメージファイルのサイズを変更してハードディスクに保存し、パーセンテージとイメージ数を報告します。 ProgressChangedイベントでは、progressBarといくつかのラベルを更新しています。私は何をしたいかアイテムの操作が終了した後、listViewアイテムを文字列に置き換えるにはどうすればよいですか?

private void Worker_DoWork(object sender, DoWorkEventArgs e) 
     { 
      for (int i = 0; i < directories.Count; i++) 
      { 
       BitmapImage imagetosave = ResizeImage(directories[i]); 
       Save(imagetosave, saveDirectory); 

       int percents = ((i + 1) * 100)/directories.Count; 
       worker.ReportProgress(percents, i); 
      } 
     } 

     private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
     { 
      progressBar1.Value = e.ProgressPercentage; 
      label.Content = e.ProgressPercentage.ToString() + "%"; 
      label2.Content = e.UserState; 
     } 

     private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
     { 

     } 

は、各時間イメージは、「サイズ変更して保存」と多分緑に例えばアイテムを着色するためのリストビュー内の項目のテキストを変更するサイズを変更して、ハードディスクに保存されました。

私は画像のサイズを変更して保存する方法。これは、次のとおりです。

public void Save(BitmapImage image, string filePath) 
     { 
      BitmapEncoder encoder = new PngBitmapEncoder(); 
      encoder.Frames.Add(BitmapFrame.Create(image)); 

      using (var fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Create)) 
      { 
       encoder.Save(fileStream); 
      } 
     } 

     private BitmapImage ResizeImage(string file) 
     { 
      var bitmap = new BitmapImage(); 
      var stream = File.OpenRead(file); 
      bitmap.BeginInit(); 
      bitmap.CacheOption = BitmapCacheOption.OnLoad; 
      bitmap.StreamSource = stream; 
      bitmap.DecodePixelHeight = 100; 
      bitmap.DecodePixelWidth = 100; 
      bitmap.EndInit(); 
      stream.Close(); 
      stream.Dispose(); 

      return bitmap; 
     } 

答えて

0

あなたの背景の労働者は、あなたが戻ってUIスレッドに呼び出し、実行が終了したら、この:RefreshCallbackは簡単です

Dispatcher.Invoke(DispatcherPriority.Normal, new RefreshCallback(Refresh)); 

リスト項目を更新する関数Refreshの代理人です。

関連する問題