2010-12-12 19 views
2

我有一個收集視頻列表數據的應用程序。我希望實時更新進度和文件名。我是否必須將所有檢查這些文件的代碼放在bw_DoWork方法中?ReportProgress是否必須在c#中的DoWork Ba​​ckground方法中完成?

目前我有這種方法,但bw.ReportProgress工作不正確。

private void GetMovieData(List<FileInfo> completeMovieList) 
    { 
     List<string> movieLists = new List<string>(); 

     int counter = 0; 
     foreach (FileInfo movie in completeMovieList) 
     { 
      counter++; 
      string[] movieData = new string[3]; 

      bw.ReportProgress(counter/completeMovieList.Count); 


      // get last modified date 
      string movieLastModified = string.Concat(movie.LastWriteTime.Year + "/" + movie.LastWriteTime.Month + "/" + movie.LastWriteTime.Day); 

      // get duation of video 
      string lengthOfVideo = Program.GetDetails(movie); 

      if (!movieListWithData.ContainsKey(movie.Name)) 
      { 
       movieData[0] = lengthOfVideo; 
       movieData[1] = movieLastModified; 
       movieData[2] = movie.FullName; 
       movieListWithData.Add(movie.Name, movieData); 

      } 

      movieLists.Add(movie.FullName + "|" + lengthOfVideo + "|" + movieLastModified); 

     } 

     StringBuilder sb = new StringBuilder(); 

     foreach (KeyValuePair<string, string[]> key in movieListWithData) 
     { 
      sb.AppendLine(key.Key + "|" + key.Value[0] + "|" + key.Value[1] + "|" + key.Value[2]); 
     } 

     File.WriteAllText(Program.movieTxtFileLocalPath, sb.ToString()); 
    } 

我的DoWork方法是這樣的:

private void bw_DoWork(object sender, DoWorkEventArgs e) 
    { 
     BackgroundWorker worker = sender as BackgroundWorker; 

      if ((worker.CancellationPending == true)) 
      { 
       e.Cancel = true; 

      } 

}

+1

您在濫用BackgroundWorker。 – SLaks 2010-12-12 03:12:22

回答

1

我必須把所有的檢查在bw_DoWork方法這些文件的代碼?

否,代碼不必在物理存在,但你必須呼叫從DoWork的代碼。目前您的DoWork方法沒有做任何事情。

還請記住在BackgroundWorker上設置屬性WorkerReportsProgresstrue。你可以在設計師那裏做到這一點。

1
 bw.ReportProgress(counter/completeMovieList.Count); 

這是一個整數除法,1/2 = 0,而不是0.5。由於計數器永遠不會大於計數,表達式總是會生成0.一種可能的修復方法是計算百分比:

 bw.ReportProgress(100 * counter/completeMovieList.Count); 
相關問題