我有自定义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