2012-07-25 16 views
0

我要顯示一個進度條滾動字幕的新形式。這種形式應該在另一個線程上,因爲被調用的動作太大,並且如果UI在同一個線程上,它不會更新進度條。多線程:新的形式接近太快

我稱之爲一個新的線程,創建自己的狀態,但只要它出現,形式接近...

這裏是我的代碼從我的主:

frmProgress f = new frmProgress(); 
    Thread t = new Thread(new ThreadStart(delegate() { f.Show(); })); 
    t.Start(); 
    documentManager.Compile(); //This is my big action 
    t.Abort(); 

下面是代碼的形式:

public frmProgress() 
    { 
     InitializeComponent(); 
    } 

我想知道我做錯了什麼。

謝謝!

+0

你看了'BackgroundWorker'類和它的'ReportProgress'方法? – Dan 2012-07-25 18:01:14

+0

是的,但我認爲使用「新線程()」會更簡單,並在完成時放棄... – LolCat 2012-07-25 18:03:00

+0

@LolCat不,實際上它不那麼簡單。 – Servy 2012-07-25 18:04:38

回答

3

你有幾個問題:

  1. 你展示在非UI線程的形式。這隻會導致問題;它需要在UI線程中。
  2. 你正在執行在UI線程長時間運行的任務;這阻止了UI更新。

您需要在UI線程中顯示論壇,並在後臺線程中運行長時間運行的任務。

對這裏的工作一個偉大的工具是使用BackgroundWorker。它會爲你做很多工作,以確保正確的代碼在UI /非UI線程中正常運行。創建一個新的BackgroundWorker並將長時間運行的任務置於DoWork事件中。讓你需要(顯示格式)啓動之前BGW,並做在Completed事件的清理工作(這將在用戶界面上運行)的任何簡單的UI更新。 MSDN page on BackgroundWorker有一些nice examples

使用BackgroundWorker的另一個優點是,您可以輕鬆報告進度(如果您有一個很好的方法可以知道您的完成百分比),而不是隻有一個滾動條。只是一個處理程序添加到ProgressReported事件處理程序來更新進度條,並在做工作的時候定期調用ReportProgress方法。請參閱鏈接的示例以瞭解確切的代碼片段。

+0

我會嘗試一下。謝謝。 – LolCat 2012-07-25 18:06:06