2013-10-11 103 views
0

我有一些問題與我bgworker。我試圖完成的是我的bgworker報告解壓zip文件到我的文本框的進度。 這是我想要顯示它:
5%
10%
15%
20%
25%
等。Backgroundworker.Report進度問題

這是從來就走到這一步:

int percentage; 
percentage = count*100/array.Length; 
worker.ReportProgress(percentage); 

我的文本框的名字是ContentTextBox

這是代碼,可能是有用的休息:

private void UnpackBackgroundWorkerCompletedEvent(object sender, RunWorkerCompletedEventArgs e) 
      { 
       FileTextBox.Text = databaseName; 
       ContentPanel.Visible = true; 
       Text = "Check Database"; 

      } 

      public void UnpackWorker(object sender, DoWorkEventArgs doWorkEventArgs) 
      { 
       if (FileTextBox.Text == "") 
       { 
        MessageBox.Show("File textbox is empty"); 
        return; 
       } 

       String fileName = FileTextBox.Text; 
       if (!File.Exists(fileName)) 
       { 
        MessageBox.Show("File doesn't exist"); 
        return; 
       } 

       Logger logger = new Logger(Path.ChangeExtension(FileTextBox.Text, ".log"), this, ContentTextBox); 

       String status = "******** Unpacking zipfile '" + fileName + "' "; 
       logger.Write(""); 
       logger.Write("********"); 
       logger.Write(status); 
       logger.Write("********"); 

       string databaseFileName = Path.ChangeExtension(fileName, ".db"); 
       DatabaseUtils.RestoreDatabase(fileName, databaseFileName); 
       logger.Write("Zipfile '" + fileName + "' unpacked to '" + databaseFileName + "'."); 

       databaseName = databaseFileName; 




      } 

public void Run() 
     { 
      var unpackWorker = new BackgroundWorker(); 

      if (FileTextBox.Text.EndsWith(".zip")) 
      { 
       unpackWorker.DoWork += UnpackWorker; 
       unpackWorker.RunWorkerAsync(); 
       unpackWorker.RunWorkerCompleted += UnpackBackgroundWorkerCompletedEvent; 
      } 
      else 
      { MessageBox.Show("No zip selected") 
      } 

     } 

編輯 寫入到一個文本框,我必須使用logger.Write() ,因爲我做了拉鍊的日誌文件開箱輸出。

感謝您的幫助/諮詢提前

+2

你說你有問題,但你沒有指定這些問題是什麼。 –

+0

我試圖做的是在我的文本框中顯示百分比。 –

+2

'DatabaseUtils.RestoreDatabase(fileName,databaseFileName);'應該被修改來報告進度。 –

回答

0

您應該處理BackgroundWorker.ProgressChanged事件,並在其中更新文本框。在調用RunWorkerAsync()之前,您也許應該添加RunWorkerCompleted事件處理程序,以避免潛在的競爭條件。

unpackWorker.DoWork += UnpackWorker; 
unpackWorker.RunWorkerCompleted += UnpackBackgroundWorkerCompletedEvent; 
unpackWorker.ProgressChanged += SomeMethodThatUpdatesYourTextBox 
unpackWorker.RunWorkerAsync();