带有流程完成消息的流程栏

时间:2014-08-13 07:04:21

标签: asp.net vb.net web-applications

我在.aspx页面的Button click事件上执行多个存储过程 在每个程序执行中,我必须在Process Baar上显示一条消息

过程1完成。 过程2完成。 过程3完成。

请在此帮助

2 个答案:

答案 0 :(得分:0)

一种方法是将Update Panel与Ajax Timer结合使用。

以下文章可能有用。

http://msdn.microsoft.com/en-in/library/cc295400.aspx

本文中给出的示例向您展示了如何使用计时器事件上的当前服务器时间更新“更新面板”中的标签。您可以轻松地根据需要调整代码,并显示您想要显示的任何消息而不是服务器时间。

修改

这里要求的是一些示例代码。

  1. 将新的aspx文件添加到您的应用程序并将其命名为Test2.aspx
  2. 替换下面给出的aspx文件的内容。
  3. 运行应用程序并查看示例代码是否正常工作。
  4. 自定义DoWorkAsync方法以满足您的需求。
  5. 运行应用程序并测试修改后的代码。
  6. ASPX文件:

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test2.aspx.vb" Inherits="Test2" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Asynchronous Update Demo</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager runat="server" ID="ScriptManager1">
        </asp:ScriptManager>
        <asp:UpdatePanel runat="server" ID="UpdatePanel1">
            <ContentTemplate>
                <asp:Timer runat="server" ID="Timer1" Interval="1000" />
                <asp:Button ID="Button1" runat="server" Text="Start" /><br />
                <asp:Label runat="server" Text="Click Start button to being processing." ID="Label1" />
            </ContentTemplate>
        </asp:UpdatePanel>
        </form>
    </body>
    </html>
    

    代码隐藏文件:

    (注意内联评论)

    Partial Class Test2
        Inherits System.Web.UI.Page
    
        Private MyAsyncProcessor As AsyncProcessor
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Session("MyAsyncProcessor") IsNot Nothing Then
                ' we are still processing.. so extract the reference of our class back from session variable
                Me.MyAsyncProcessor = Session("MyAsyncProcessor")
            End If
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            ' this event is fired everytime a timer ticks. 
            If MyAsyncProcessor IsNot Nothing Then
                Label1.Text = MyAsyncProcessor.StatusMessage
                If Not MyAsyncProcessor.IsProcessing Then
                    MyAsyncProcessor = Nothing
                    Session.Remove("MyAsyncProcessor")
                    Timer1.Enabled = False
                End If
            End If
        End Sub
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Label1.Text = ""
            Button1.Enabled = False
            Timer1.Enabled = True
            MyAsyncProcessor = New AsyncProcessor
            MyAsyncProcessor.Start()
            Session("MyAsyncProcessor") = MyAsyncProcessor  'save reference in a session variable
        End Sub
    End Class
    
    Public Class AsyncProcessor
        Public IsProcessing As Boolean
        Public StatusMessage As String
    
        Public Sub Start()
            Dim th As New Threading.Thread(AddressOf DoWorkAsync)
            th.Start()
        End Sub
    
        Private Sub DoWorkAsync()
            ' *** Replace this code with whatever work you want to do ***
            ' Set IsProcessing=True at beginnning of task and set it to False when exitting.
            ' Update the StatusMessage at regular intervals.
    
            IsProcessing = True
            For i = 1 To 10
                '' this sleep is only to simulate a long going task
                Threading.Thread.Sleep(1000)
                StatusMessage &= String.Format("Task #{0} completed... <br>", i)
            Next
            StatusMessage &= "All tasks completed."
            IsProcessing = False
        End Sub
    End Class
    

答案 1 :(得分:0)

另一种方法是将工作委托给iframe中的页面。在iframe页面上,当您的代码被处理时,您可以更新Session变量以包含&#39; Finished Processing第一步&#39; (或其他)并使用父页面上的PageMethods来调用Web方法,该方法获取由iframe页面上的代码更新的会话的值。