Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vb.net代码没有';第一次它不工作';s运行,但在后续运行时不运行_Vb.net - Fatal编程技术网

vb.net代码没有';第一次它不工作';s运行,但在后续运行时不运行

vb.net代码没有';第一次它不工作';s运行,但在后续运行时不运行,vb.net,Vb.net,整夜被对象引用未设置错误困扰后。我终于找到了一些有效的代码。问题很简单,我必须先单击按钮2x,然后才能执行以下操作: dim turl as string dim eles as htmlcollection turl = textbox1.text 'Navigate to task page iexplore.Navigate(turl) Do eles = iexplore.Document.GetElementsByT

整夜被对象引用未设置错误困扰后。我终于找到了一些有效的代码。问题很简单,我必须先单击按钮2x,然后才能执行以下操作:

    dim turl as string
    dim eles as htmlcollection

    turl = textbox1.text

    'Navigate to task page
    iexplore.Navigate(turl)

    Do
        eles = iexplore.Document.GetElementsByTagName("td")
    Loop While IsNothing(eles) or iexplore.IsBusy

    For Each he As HtmlElement In eles
        If Not IsNothing(he.InnerText) Then
            If he.InnerText.Contains("Remove") Then
                If Not IsNothing(he.NextSibling) Then
                    If Not IsNothing(he.NextSibling.InnerText) Then
                        If Not he.NextSibling.InnerText.Contains("Completed") Then
                            If Not IsNothing(he.Parent.Children.Item(3)) Then
                                MsgBox(he.Parent.Children.Item(3).InnerText)
                            End If
                        End If
                    End If
                End If
            End If
        End If
    Next
iexplore是对web浏览器控件的引用

有没有人能想到我应该添加什么,以确保按钮只需单击一次?(是的,它是在一个单击事件上运行的,另一个被调用的代码第一次运行时没有问题,只有这个部分似乎需要单击两次)

我还想指出,每次引入新url时,它的行为都是这样的


已编辑:修复了无限循环

如果您试图在导航完成之前访问页面,请尝试在事件处理程序中访问它


编辑OP的每个请求,了解如何删除EventHandler以防止为事件分配多个处理程序。删除不存在的处理程序不会导致错误

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    AddHandler WebBrowser1.DocumentCompleted, AddressOf DocumentCompleted
    WebBrowser1.Navigate("Http:\\www.Google.com")
End Sub

Private Sub DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
    RemoveHandler DirectCast(sender, WebBrowser).DocumentCompleted, AddressOf DocumentCompleted
    MsgBox("hello")
End Sub

您是否尝试过在所有异常(甚至捕获的异常)上使用break进行调试?有时,调试器会在不应该捕获的情况下捕获异常,这可能是因为第一次运行时出现异常。此外,您是否仔细检查了失败的条件是否是导致它无法到达
MsgBox
行的原因?这是有问题的,因为我无法通过调试器运行代码。调试器没有访问某些文件的权限,这些文件在运行代码时会被访问。请在发布一个小片段后进行编辑。您可能想了解一下:我对这种方法的担心是,我实际上是在程序启动后立即加载文档。加载的文档需要身份验证,因此我强制用户将其移开,以便程序可以从此点开始自由使用身份验证令牌。我不希望在加载第一个文档时运行代码。这似乎是一种“每次加载文档时都这样做”的方法,这不是我需要的。如果是我试图访问文件太快,我可能不得不抛出一个计时器在那里。我宁愿不要…你不能访问物理上不可用的东西。您可能需要在那里放置某种条件来测试第一次文档加载。或者检查您是否有授权令牌我很好奇,如果我将添加处理程序行放在按钮单击事件中,它应该在按钮被单击之前不起作用否?我移动了它并将其设置为我的上一条注释,它起作用了,只不过它显示了msgbox 2x…这是正确的,但您需要注意不要多次添加它。在将处理程序添加到click事件或document completed事件之前,可以删除该处理程序。