2011-09-29 30 views
0

我有一個VB6應用程序,它在form_load中做了很多處理。調用DoEvents可確保在處理完成之前加載表單。然而,這並沒有出現在VB.NET即工作在下面的代碼,循環結束前的形式加載,即使我已經叫DOEVENTS:VB.NET DOEVENTS

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    For i = 0 To 100000 
     Application.DoEvents() 
     Dim Test As String = "Test" 
    Next 
End Sub 

有什麼我錯過了?

+8

甜蜜寶貝耶穌。 –

+3

可以將處理轉換爲後臺工作線程而不是在表單加載中完成? –

回答

8

你聲明:

到的DoEvents調用保證了加工前的形式加載完成

據我所知,這是不正確的。處理加載事件之前的表單「顏色」 - 處理(即加載)仍然不完整。通過調用DoEvents確保所有這些都是OTHER消息,當您處於長時間處理過程中時,有機會進行處理。 MSDN's help of DoEvent()描述爲:

處理當前在消息隊列中的所有Windows消息。

此外,它明確規定:

與Visual Basic 6.0中,DoEvents方法不調用了Thread.Sleep方法。

我認爲在Load事件中處理您的需求可能會有風險。只是搜索「負載中的Application.DoEvents」在谷歌談論許多不好的經驗。我建議你可以在Shown event中探索處理你的需求。

0

VB.NET中的DoEvents應該被主動避免。

看看DoEvents in .NETStop DoEventsDoEvents is Evil,看看爲什麼。

這是一個常見的誤解,這和VB6 DoEvents一樣。在幾乎所有情況下,您想要實現的內容都可以在.NET中以其他方式完成,而無需調用DoEvents。

你最好打賭可能是BackgroundWorker object看看this example讓你開始。

但要注意的一點是,你不能沒有使用委託更新您的形式從後臺工作的控制 - 但這是另外一個問題...