我有自定义的 winform 前端,它从用户那里获取参数设置,并为 ssrs 报告构建一个 url,并在 WebBrowser 控件中显示该报告。这很好用,除了我需要计算报告在屏幕上显示所需的时间。
我试过(WebBrowser HTML 文档):
DocumentCompleted 事件- 问题:当加载对话框仍然可见时,它会被调用。
ProgressChanged 事件- 问题:我试图获取文档的就绪状态,但在显示“加载”对话框时它仍显示为已完成。
似乎报告的加载必须是来自 ssrs 服务器的 ajax 调用,所以我现在正在寻找我能做些什么来确定何时发生这种情况。
因此,我需要做的是捕获报表实际显示在 Web 浏览器控件中的时间(而不是显示加载对话框时)。关于如何做到这一点的任何建议?
编辑:这是我尝试过的东西,它似乎第一次起作用,但仍然不对。问题是我触发的 ProgressChanged 事件,我只是使用它来捕获所有页面事件。我在想我想在页面上键入 Async 事件,以便在正确的事件上执行。
样本:
Private Sub ReportDocumentLoaded() Handles wbReportViewer.ProgressChanged
Dim doc As HtmlDocument = wbReportViewer.Document
If Not doc Is Nothing Then
Dim el As HtmlElement = doc.GetElementById("ReportViewerControl_AsyncWait_Wait")
If Not el Is Nothing Then
Dim rptStyles = el.Style.Split(";")
For Each s As String In rptStyles
If s.ToUpper.Contains("VISIBILITY") Then
If s.ToUpper.Contains("HIDDEN") Then
MsgBox("Report is displayed" & s)
End If
End If
Next
End If
End If
End Sub
我在想,对于我的情况,我将不得不通过注入一些 JavaScript 来附加到页面事件。
http://msdn.microsoft.com/en-us/library/bb386417(v=vs.100).aspx