【问题标题】:IndexOutOfRangeException in VB.NETVB.NET 中的 IndexOutOfRangeException
【发布时间】:2010-11-01 10:42:03
【问题描述】:

挑选了一个最初为 .NET 框架 1.1 版编写的遗留 VB.NET 项目。我正在使用 .NET 3.5 运行 Vista。我已经清除了所有原始错误,项目将建立;它只是不会运行。

据我所知,它正在尝试运行“LoginForm”,但放置断点不起作用,因为在到达断点之前抛出错误,无论它们放置在文件中的什么位置。

真的不知道该怎么办!任何帮助表示赞赏。

堆栈跟踪:

System.IndexOutOfRangeException 未处理 Message="索引超出了数组的范围。" 来源="第一行" 堆栈跟踪: 在 FirstLine.LoginForm.main() 在 System.AppDomain._nExecuteAssembly(程序集程序集,字符串 [] 参数) 在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,证据 assemblySecurity,String [] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(对象状态) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) 在 System.Threading.ThreadHelper.ThreadStart() 内部异常:

编辑:非常抱歉,不明白代码会有多大用处,因为问题更多是我无法解决的。但是,这是主要功能:

共享子 main() Dim p As Process() = Process.GetProcessesByName("FirstLine") 如果 p.Length = 1 那么 '开始抄写员 '将到期日期调暗为日期 = CDate("01/01/1970") '将到期时间变暗为整数 '尝试 ' GetCopyMinderExpiryDate(到期) ' 如果未到期 = 0 且未到期 = 1 则 ' 到期日 = 到期日.AddSeconds(到期) ' Dim diff As Integer = DateDiff(DateInterval.Day, Date.Now, expirydate) ' 如果 diff >= 0 并且 diff 0 那么 ' 显示错误((ret_code)) ' 结尾 '万一 'Dim 做为字符串 'GetCopyMinderDeveloperID(did) '如果做了“它”然后 ' MessageBox.Show("无效的开发者 ID " & did & "。Firstline 现在将关闭", "Firstline", MessageBoxButtons.OK, MessageBoxIcon.Error) ' 结尾 '万一 '结束抄写员 暗淡作为新的登录表单 如果 LoginSettings.setting("loginShowErrorOnLine") = "TRUE" 那么 lf.ShowDialog() 别的 尝试 lf.ShowDialog() 抓住前任作为例外 消息框(例如消息) Config.UnlockByUser(Config.currentUser.username) Config.currentUser.UserLoggedOff() 结束尝试 万一 别的 将 prc 作为进程调暗 = p(0) SwitchToThisWindow(prc.MainWindowHandle, True) 万一 结束子

感谢您迄今为止的回复。看到这样一个乐于助人的社区令人鼓舞!

【问题讨论】:

  • 发布一些代码。 LoginForm.main() 里面有什么?与此同时,这可能会有所帮助:stackoverflow.com/questions/964566/…
  • FirstLine.LoginForm.main() 的一些源代码可能会有所帮助:-)。

标签: vb.net .net-3.5


【解决方案1】:

尝试开启调试构建;这将使您可以添加断点,并且还会在堆栈跟踪中为您提供一些行号。

您的问题是您没有处理 p.Length = 0 的情况。如果没有名为“FirstLine”的进程,则会发生这种情况。

您是否还重命名了您的流程/应用程序?

【讨论】:

  • 没有真正的 .NET 背景,所以不知道我可以使错误更具描述性!我现在试试。非常感谢!
  • 只是阅读 .NET 框架下的进程。一旦我明白了,我会回复你的。到目前为止,我已经放入了 elseif p.length = 0 然后我假设我只是开始一个新进程?我认为这是对的。非常感谢您的帮助,非常感谢!
【解决方案2】:

Dim prc As Process = p(0) 是您的问题,因为它在 else 语句中,其中数组长度可以是 1 以外的任何值(例如 0)。

当长度为 0 时,它会在您尝试访问第一个元素时为您提供 IndexOutOfRange。

【讨论】:

  • 你说的很对!我想我的问题是为什么它不对断点做出反应?它肯定会执行该代码(console.writeline 产生输出),但似乎完全忽略了断点。抱歉,如果这是一个愚蠢的问题=/
猜你喜欢
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 2012-06-11
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多