【问题标题】:For cycle causes unwanted "exit sub" event对于循环导致不需要的“退出子”事件
【发布时间】:2011-11-22 07:31:24
【问题描述】:

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() 之前的循环。

有人知道如何解决这个问题吗?

谢谢大家

【问题讨论】:

  • 您能否显示所有与 midrep 相关的代码,包括定义和更改其值的所有内容?
  • 另外,这只是一个猜测,但您是否使用其他应用程序域?

标签: vb.net vb.net-2010


【解决方案1】:

我会冒险猜测你没有离开For 循环,因为你超出了midrep(你没有给我们的类型)或@ 987654323@,这显然是FileInfo对象的数组。

事实上,不管midrep 的定义如何,你肯定超出了diar1 的范围,因为diar1.Count 总是比最后一个可用索引高一个。您需要到达diar1.Count之前停止循环。

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

【讨论】:

  • 感谢亚当!接得好!我有点惊讶我没有收到错误消息......我不知道可以在 VB.NET 中禁用数组绑定检查,也不知道默认设置被禁用!我会看看我是否可以为这个项目启用它(我没有性能问题,这是一个非常简单的应用程序)再次感谢!
  • 顺便说一句:我刚刚又试了一次:不走运,它仍然退出潜艇。 :-(
猜你喜欢
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 2021-07-20
  • 2017-04-14
  • 1970-01-01
相关资源
最近更新 更多