我有以下代码片段,如果同步执行,页面呈现之前将需要一些时间。
我还没有找到代码框架来利用异步来实现异步,或者没有其他方法可以实现异步,因此UI不会卡住执行冗长的操作。最好是先渲染UI,然后等待操作。
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
PageSetup()
'make the following function execute asynchronously
LengthyOperation(input)
End Sub
答案 0 :(得分:0)
我刚刚尝试使用UpdatePanel,希望异步执行此冗长的操作,并使用内容对UI进行部分更新。
但是LoadUpdatePanels永远不会被调用。
客户端:
<asp:UpdatePanel ID="udpCheckout" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Label ID="lblWait" runat="server" Visible="true" Text="Please wait..."></asp:Label>
<asp:Repeater ID="rpt" runat="server" DataSourceID="xmlDS">
<ItemTemplate>
</ItemTemplate>
</asp:Repeater>
<asp:XmlDataSource ID="xmlDS" runat="server" CacheDuration="1" XPath="//something"></asp:XmlDataSource>
<asp:Button ID="hiddenAsyncTrigger" runat="server" Text="AsyncUpdate" style="display:none;" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="hiddenAsyncTrigger" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
服务器端:
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim cs As ClientScriptManager = Page.ClientScript
If Not cs.IsStartupScriptRegistered(Me.Page.GetType, "LoadUpdate") Then
cs.RegisterStartupScript(Me.Page.GetType, "LoadUpdate", Page.ClientScript.GetPostBackEventReference(hiddenAsyncTrigger, String.Empty))
End If
End Sub
Sub LoadUpdatePanels(ByVal o As Object, ByVal e As EventArgs) Handles hiddenAsyncTrigger.Click
'lengthy operations
lblWait.Text = "Content is now loaded."
End Sub