MSHTML程序集的诡异问题
Dim u As UInteger = 0
Try
Do
u += 1
j = DirectCast(o.item(d), HTMLTableRow).cells
Loop
Catch ex As Exception
MsgBox("第" & u & "次访问出错:" & ex.GetType.ToString & ":" & ex.Message)
End Try
这是我用来测试的一段代码,是一个死循环,无限次访问变量o(在之前的代码中赋值)然后复制给变量j(o和j都是MSHTML.IHTMLElementCollection类型)。在Debug模式下可以一直正常运行,直到计数器u达到上限。但是在Release模式下,循环5000~6000次(每次运行数目都不同)就会报错"NullReferenceException"。注意我一直都是在访问o,没有对o进行任何修改,为什么会出错呢?这是MSHTML这个程序集的bug吗?另外,如果进行一个小改动:
Dim u As UInteger = 0, v As Object
Try
Do
u += 1
v = DirectCast(o.item(d), HTMLTableRow)
Loop
Catch ex As Exception
MsgBox("第" & u & "次访问出错:" & ex.GetType.ToString & ":" & ex.Message)
End Try
也就是把.cells去掉,就不会出错了。这又是怎么回事?(这个方法并不能用来workaround,因为我的程序必须要访问.cells)