2010-12-21 29 views
3

我創建了一個帶有選取框樣式的進度條的加載窗體。在我的MainForm我試圖做到這一點:C#如何使用選取框進度條加載表單?

//before downloading 
loadingForm lf = new loadingForm(); 
lf.Show(); 
//start downloading 
//finishdownloading 
lf.Close(); 

的loadingForm被證明,但進度條沒有出現,而且形式看起來就像是崩潰。下載完成後,loadForm被關閉,我的應用程序繼續正常運行。在loadingForm我只有:

void loadingForm_Load(object sender, EventArgs e) 
{ 
    progressbar1.visible = true; 
} 

我已經設置progressbar1風格loadingForm.design到選取框。我該如何解決?感謝您的幫助提前。

+1

* * * * * lf.Show()調用。使用BackgroundWorker.RunWorkerCompleted事件來調用lp.Close() – 2010-12-21 13:57:19

+0

對不起,但你能解釋你的答案嗎?我對編程有點新鮮感。你的意思是不要阻止?我如何使用BackgroundWoker.RunWorkerCompleted來調用lf.Close?謝謝。 – PeteMerry 2010-12-21 14:19:36

回答

1

這很可能是因爲下載和帶有進度欄的表單在同一個線程上運行。您可以使用BackgroundWorker在與表單不同的線程中執行下載。

+0

感謝您的回答。正如我在評論中問阿斯達克,我可以加載新的表單,而不是另一個線程嗎?因爲我的mainForm已經在客戶端和服務器之間的每個連接創建新的線程的情況下有點複雜了。 – PeteMerry 2010-12-21 13:27:51

0

UI線程可能沒有 「資源」 重繪UI,你應該使用後臺工作如前所述,或在處理申請的消息隊列。從Show()方法到Close()方法,您應該確保調用Application.DoEvents(),以便處理所有的Windows消息(並將消息重繪爲您的應用程序表單)