【问题标题】: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;
}
}