2011-08-26 52 views
1

在窗體上單擊下一步我需要顯示其他窗體並開始一些處理。在C#中編碼#空載完成事件的窗體

問題是在表單完成可見之前,方法被觸發並且處理開始並且UI看起來像崩潰了。處理在加載控件之前就開始了。一旦處理完成,所有控件都可見。 enter image description here 實際的輸出必須是所有的控件應該加載,然後處理必須啓動。 enter image description here

我需要在窗體(用戶控件)可見並且完全加載後調用方法來開始處理。

我試過thisthis,但沒有運氣。

添加代碼:

private void FeatureRemovalControl_Load(object sender, EventArgs e) 
{ 
    pictureBox2.Image = Properties.Resources.line; 
    prgbar.Value = 0; 
    //code to load images and some other stuff 
    StratProcess(); 
} 

回答

3

您正在從UI線程調用StartProcess(它似乎阻止,直到完成)。由於WinForms重繪發生在該線程上,因此沒有任何內容被繪製,並且看起來您的進程已掛起。您應該查看使用BackgroundWorker或其他方式異步調用StartProcess

+0

但進度條出現並似乎更新? – w69rdy

+0

是的,我知道。那是我問的。你能以某種方式暗示我嗎? –

+0

是的:使用'BackgroundWorker'。 –

0

嘗試調用該方法在FormLoad活動結束時,控制應該已經由然後加載完畢。如果它沒有,你可能需要執行一些檢查,並可能創建一個自定義事件,當你很高興它已經準備就緒時觸發。

另一個解決方案是有一個按鈕,用戶必須按觸發處理,他們將只能點擊一次一切都已經加載

編輯:的原因,它看起來就像它的發生是因爲您正在使用控件的一種加載方法啓動該過程,我認爲這不是加載的最後一個控件,因此它在其他控件有機會加載之前開始處理。讓StratProcess方法公開,並調用它的父窗體的FormLoad方法來代替,像這樣:

private void ParentForm_Load(object sender, EventArgs e) 
{ 
    FeatureRemovalControl.StratProcess(); // Should it be called StartProcess instead? 
} 

要小心的是這又是做UI線程上的處理,讓畫面可能會出現「掛」,而這是發生的,所以我建議你像其他人所建議的那樣將它移動到後臺線程。

+0

我在做同樣的事,但沒有工作。由於它是從表單加載事件調用的,因此該方法即使在表單加載完成之前也會開始處理,因此UI受到干擾。 –

+0

用什麼方法觸發處理?你能發佈這個代碼嗎? – w69rdy

+0

問題已更新 –