我们在对话框中嵌入了.NET WebBrowser控件(实际上有两个在不同的选项卡中,如果由于某种原因可能很重要)并且遇到了一个奇怪的问题。我无法在完整的应用程序之外重现问题,因此我假设我们正在做其他地方的副作用。因此,我无法发布任何代码来重现问题,但我仍然希望有人可能至少对如何调试情况提出建议,并可能找到组件失败的原因。
通常,一切都按预期工作。我们将控件添加到对话框并调用其Navigate方法以从服务器获取HTML页面。在某些情况下(可能是20-25%的尝试),控件保持空白并继续显示等待光标。从独立的IE加载相同的URL时,问题是不可重现的。
为了找到问题,我们正在记录Navigating,Navigated,DocumentCompleted,ProgressChanged和StatusTextChanged事件。在它工作的情况下,我们按顺序看到Navigating,Navigated和DocumentCompleted事件,并在它们之间混合了几个ProgressChanged和StatusTextChanged事件(具有合理的值)。
在组件发生故障的情况下,仅触发导航事件。但是,服务器日志和网络转储都确认从服务器请求并正确传送了文档。格式错误或非法内容当然至少是理论上的可能性,但在它甚至试图分析服务器提供的任何内容之前,我本来期望该组件至少有一个Navigated事件。我们还能够使用完全相同的HTML文档重现成功和失败的行为。
回到我原来的问题:对情况的描述可能有点薄,我不希望这个问题的解决方案完成,但是有人可能至少建议在哪里寻找和寻找什么?我对.NET开发没有太多经验,但由于WebBrowser可能只是IE的ActiveX组件的一个薄层,我怀疑我能够调试它的内部以找到问题的任何可能原因吗?
答案 0 :(得分:1)
在CodeProject上尝试这个不同的webbrowser组件时,可能值得你...它的不同之处在于你可以用它做更多的功能。检查它是否适用于此扩展版本的webbrowser控件是一个有用的测试。
希望这有帮助, 最好的祝福, 汤姆。
答案 1 :(得分:0)
我想我必须回答这个问题。虽然我对我不理解的问题的解决方法不太满意,甚至不理解为什么解决方法有效,但我们设法修改了代码,因此我们至少无法重现奇怪的行为。诀窍是在使用真实URL调用Navigate("about:blank");
之前调用Navigate
。
我认为解决方法解决了某种时序或并发问题。