在事件期间获取InternetExplorer对象的属性时,Explorer线程被阻止

时间:2016-08-07 15:08:15

标签: vb.net events

我正在寻找以下问题的帮助(或建议/线索)。

此控制台应用:

  1. 查找InternetExplorer对象
  2. 找到后,创建一个新的ListenerExplorer对象
  3. 其中激活了事件处理程序(TitleChange)
  4. 现在,当您在浏览器(不是IE,但是一般的explorer.exe)处于活动状态并且导航到文件夹(这会触发TitleChange事件)时运行此应用程序阻止资源管理器线程。在关闭VB应用程序之前,无法在资源管理器中进一步导航。

    此暂停发生在TitleChange子行的

    行上
    Console.WriteLine("URL=" + objIE.LocationURL)
    

    在事件之外获取LocationURL属性可以正常工作。在事件中,它阻止了资源管理器线程。 引起我注意的是,在Visual Studio的即时窗口中,在上面一行的断点上,我无法访问相同的属性:

    ?objIE.LocationURL
    Evaluation requires a thread to run temporarily. Use the Watch window to perform the evaluation.
    

    代码:

    Dim objIE As SHDocVw.InternetExplorer
    
    Sub Main()
        Dim objShellWindows As SHDocVw.ShellWindows = CreateObject(“Shell.Application”).Windows
        If (objShellWindows.Count > 0) Then
            objIE = objShellWindows.Item(0)
            AddHandler objIE.TitleChange, AddressOf TitleChange
    
            'wait for events until a key is pressed by the user
            Do
                If Not (Console.ReadKey.KeyChar = "") Then Exit Do
            Loop
        End If
    End Sub
    
    Private Sub TitleChange(title As String)
        Console.WriteLine("TitleChange: " + title) 'works fine
        Console.WriteLine("URL=" + objIE.LocationURL) 'blocks the explorer thread!
    End Sub
    

    我用谷歌搜索了几天,但无法解决它...任何帮助都将不胜感激!感谢

1 个答案:

答案 0 :(得分:0)

控制台应用程序需要一个消息循环。 通过在MS Visual Studio中创建Windows窗体应用程序项目而不是控制台应用程序项目来解决此问题。