【发布时间】:2018-09-07 17:49:04
【问题描述】:
我有一个带有按钮的 asp.net 网络表单页面,当单击该按钮时,应该执行一个 Task,我希望该任务异步执行并将其进度报告给 File(和可能稍后会到 UI,但现在我们坚持使用文件)。
ASPX:
<asp:UpdatePanel runat="server" ID="upPage">
<ContentTemplate>
<div class="jumbotron">
<asp:Button runat="server" ID="BtnExecute" CssClass="btn btn-primary btn-lg" Text="Execute Heavy Task" OnClick="BtnExecute_Click" />
<asp:Label runat="server" ID="LblStatus" Text="Ready...."/>
</div>
</ContentTemplate>
</asp:UpdatePanel>
后面的代码:
public partial class _Default : Page
{
public Progress<int> HeavyTaskProgress { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnExecute_Click(object sender, EventArgs e)
{
HeavyTaskProgress = new Progress<int>();
HeavyTaskProgress.ProgressChanged += Progress_ProgressChanged;
Task.Run(() => DoProcessing(HeavyTaskProgress)).ContinueWith(t => ProcessingFinished(t));
LblStatus.Text = "Task is launched.... Please wait";
}
private void Progress_ProgressChanged(object sender, int e)
{
string message = string.Format("progress at {0}%{1}", e, Environment.NewLine);
System.IO.File.AppendAllText(@"d:\progress.txt", message);
}
private void DoProcessing(IProgress<int> progress)
{
for (int i = 0; i < 10; ++i)
{
Thread.Sleep(1000); // CPU-bound work
if (progress != null)
progress.Report(i);
}
}
private void ProcessingFinished(Task t)
{
System.IO.File.AppendAllText(@"d:\progress.txt", "Task done !! " + t.Status);
}
}
在d:\progress.txt 文件中我只有一行(任务完成...)并且没有报告进度(Progress_ProgressChanged 中的断点没有中断)。我认为这可能是因为Progress_ProgressChanged 和DoProcessing 在不同的线程中执行,但我不知道如何解决。
感谢您的帮助。
【问题讨论】:
标签: c# asp.net task-parallel-library