【问题标题】:How to execute asynchronous task in asp.net 4.0如何在asp.net 4.0中执行异步任务
【发布时间】:2014-04-22 12:10:09
【问题描述】:

我是 ASP.net 新手,遇到了异步任务问题。

这是我想做的。

假设我有一个名为 WebPage1 的网页,带有一个按钮 Button1。

protected void Button1_Click(object sender, EventArgs e)
    {
        Button1.Text = "Working....";
        System.Threading.Thread.Sleep(20000);
        Button1.Text = "Finish !";
    }

我希望能够切换到 WebPage2 而不会丢失我从按钮 1 开始的任务。所以当我在 20 秒后回到 WebPage1 时,我应该能够阅读“完成!”在按钮上。

有可能吗?我强调我必须使用 .net 4.0

我已经看过了

但我找不到解决问题的方法

提前致谢!

【问题讨论】:

标签: asp.net asynchronous task-parallel-library


【解决方案1】:

首先您需要导入。

using System.Threading.Tasks;

那么您的按钮处理程序应该如下所示。

protected void Button1_Click(object sender, EventArgs e)
    {
        Button1.Text = "Working....";
        Task.Factory.StartNew(() =>
        {
               //Do Stuff
        });
    }

您需要通过某种方式知道任务何时完成,以便在您返回页面加载时进行检查。这很可能是某种数据库值。它可以让你告诉用户任务是否完成。

【讨论】:

    【解决方案2】:

    对于异步回发,您可以尝试使用更新面板来实现这一点。

    下面是一个简单的例子,你可以参考:

        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="Updt1" runat="server">
            <ContentTemplate>
                <asp:Label ID="lblError" runat="server" Text="Label"></asp:Label>
                <asp:Button ID="btn" runat="server" Text="Click Update" onclick="btn_Click"/>
                <asp:UpdateProgress ID="UpdtProgress" DisplayAfter="1" AssociatedUpdatePanelID="Updt1" runat="server">
                    <ProgressTemplate>
                        Please Wait
                    </ProgressTemplate>
                </asp:UpdateProgress>
            </ContentTemplate>
        </asp:UpdatePanel>
    
    
    protected void btn_Click(object sender, EventArgs e)
            {
                try
                {
                    lblError.Visible = false;
                    lblError.Text = "Start";
                    System.Threading.Thread.Sleep(6000);
                    lblError.Text = "End";
                    lblError.Visible = true;
                }
                catch (Exception ex)
                {
                    lblError.Text = ex.Message;
                    lblError.Visible = true;
                }
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多