使用RegisterAsyncTask与Page_Load异步执行

时间:2018-09-18 07:00:10

标签: asp.net vb.net

我有以下代码片段,如果同步执行,页面呈现之前将需要一些时间。

我还没有找到代码框架来利用异步来实现异步,或者没有其他方法可以实现异步,因此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

1 个答案:

答案 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