2011-11-21 54 views
1

Vb.net 2010 Express中的真正奇怪的行爲。代碼如下:對於循環導致不需要的「退出子」事件

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Dim a As Integer 
     '... Other lines...' 
     Dim di As New IO.DirectoryInfo(App_Path & "midi\") 
     Dim diar1 As IO.FileInfo() = di.GetFiles() 
     For a = 0 To diar1.Count 
      midrep(a) = diar1(a).Name 
     Next a 
     Preload() 
End Sub 

由於某些原因,帶有「Preload()」指令的最後一行沒有執行。 (我檢查了一個斷點,它從來沒有達到過)。

如果我刪除循環,它工作正常。隨着週期,我沒有得到任何錯誤或警告,但最後一行完全被忽略。 for循環正確執行。

我需要preload()之前的週期。

任何人都知道如何解決這個問題?

謝謝大家

+0

您能否顯示所有與midrep相關的代碼,包括定義和更改其值的所有內容? – Timiz0r

+0

此外,這只是一個猜測,但你是否使用其他appdomains? – Timiz0r

回答

2

我要大膽地猜測,你沒有走出For循環,因爲你要麼超出的midrep界限(你有沒有給我們的類型)或diar1,這顯然是一個FileInfo對象的數組。

事實上,不管midrep的定義如何,你肯定會超出diar1的範圍,因爲diar1.Count總是比最後一個可用索引高一個。您需要停止在之前循環,您會到diar1.Count

For a = 0 To diar1.Count - 1 
'      ^^^^ 
    midrep(a) = diar1(a).Name 
Next a 
+0

謝謝亞當!接得好! 我有點驚訝,我沒有得到任何錯誤信息......我不知道在VB.NET中禁用數組綁定檢查,並且根本不知道默認設置是否被禁用!我會看看我是否可以爲此項目啓用它(我沒有任何性能問題,它是一個非常簡單的應用程序)再次感謝! – Davide

+0

順便說一句:我只是再試一次:沒有運氣,它仍然退出分。 :-( – Davide