从隐藏的 TWebBrowser 关闭时出现访问冲突问题

3

场景:

  • 一个带有两个TTabSheets的TPageControl
  • 在非可见标签页上有一个TWebBrowser
  • 在创建窗体时调用WebBrowser->Navigate

如果用户只是运行窗体并退出,则在应用程序关闭期间会生成访问冲突:

在$507C1413处发生第一次例外。具有消息“访问地址0x00000010的$c0000005异常”。 进程Project1.exe (3464)

调试器中的调用堆栈仅包含单个条目,这表明调用堆栈正在被损坏:

:507c1413 ; C:\Program Files (x86)\Embarcadero\Studio\16.0\bin\vcl220.bpl

(另一个应用程序显示调用堆栈仅具有单个IsFormSizeStored条目。)

在代码或UI中切换到浏览器的标签页可以避免该问题。不调用Navigate也可以避免该问题。

在XE4和XE8中观察到。

修复此问题的最佳方法是什么?


无法在 Delphi XE3 中导航到 google.com。 - TLama
@TLama - 这似乎是XE4中的新功能。我不再安装XE3,但我刚刚尝试了XE2,在那里我无法重现它。 - Josh Kelley
你尝试过将对 WebBrowser->Navigate 的调用移动到不同的位置(例如 AfterConstruction)以允许表单完全创建吗? - Ken White
@KenWhite - 移动到FormShow并不能解决问题。 - Josh Kelley
你试过在关闭时清理吗?(例如,导航到 about:blank) - Ondrej Kelle
@TOndrej - 当我尝试导航到about:blank时,它并没有起作用(尽管我没有确保导航完成)。然而,在FormClose中删除TWebBrowser实例确实有效。感谢您的建议。 - Josh Kelley
1个回答

1

根据@TOndrej的建议,我添加了一个FormClose事件处理程序,在应用程序关闭之前删除TWebBrowser控件。

此问题已在RAD Studio Quality Portal上记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接