2012-05-18 79 views
2

我正在使用c#的Windows應用程序。如何在Windows應用程序中顯示進度條?

我有一個窗體和一個類有所有的方法。

我在類中的方法中,我在ArrayList中處理一些文件。我想爲這個文件處理調用進度條方法,但它不起作用。

任何幫助

PFB我的代碼片段:

public void TraverseSource() 
{ 
    string[] allFiles1 = Directory.GetFiles(sourcePath, "*.xml", SearchOption.AllDirectories); 

    var allFiles = new ArrayList(); 
    var length = allFiles.Count; 
    foreach (string item in allFiles1) 
    { 
     if (!item.Substring(item.Length - 6).Equals("MD.xml")) 
     { 
      allFiles.Add(item); 

      // Here i want to invoke progress bar which is in form 
     } 
    } 
} 

回答

7

你想使用BackgroundWorker組件,其中DoWork處理程序包含您的實際工作(在string[] allFiles1部分及以後)。它看起來像這樣:

public void TraverseSource() 
{ 
    // create the BackgroundWorker 
    var worker = new BackgroundWorker 
         { 
          WorkerReportsProgress = true 
         }; 

    // assign a delegate to the DoWork event, which is raised when `RunWorkerAsync` is called. this is where your actual work should be done 
    worker.DoWork += (sender, args) => { 
     string[] allFiles1 = Directory.GetFiles(sourcePath, "*.xml", SearchOption.AllDirectories); 

     var allFiles = new ArrayList(); 

     foreach (var i = 0; i < allFiles1.Length; i++) 
     { 
      if (!item.Substring(item.Length - 6).Equals("MD.xml")) 
      { 
       allFiles.Add(item); 
       // notifies the worker that progress has changed 
       worker.ReportProgress(i/allFiles.Length*100); 
      } 
     } 
    }; 
    // assign a delegate that is raised when `ReportProgress` is called. this delegate is invoked on the original thread, so you can safely update a WinForms control 
    worker.ProgressChanged += (sender, args) => { 
     progressBar1.Value = args.ProgressPercentage; 
    }; 

    // OK, now actually start doing work 
    worker.RunWorkerAsync(); 

} 
+0

謝謝.. 你可以分享一些代碼,以顯示我應該如何實現它? – Aquarius24

+0

好的,我已經添加了一個示例。 – HackedByChinese

+0

'var'不是C#代碼... – Si8

相關問題