ボタンをクリックしたときに開始するタスクの現在の状態を示すラベルテキストを更新する必要があります。 タスクが開始すると、ラベルは「生成中」と表示され、終了するとラベルは「生成済み」と表示されます。それはここでASP .NET、タスク実行時の更新ページ
は私がしようとしてきたかを示すことは非常に単純化されたコードを行く....簡単なように見えた:
<asp:UpdatePanel runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Button Id="btn1" runat="server" Text="Run"
OnClick="btn1_Click"/>
<asp:Label ID="lbl1" runat="server" Text="Not Generated"/>
</ContentTemplate>
</asp:UpdatePanel>
:
まず、私は、BackgroundWorkerの
Default.aspxのを試してみました
Default.aspx.cs:
protected void btn1_Click(object sender, EventArgs e)
{
lbl1.Text = "Generating";
var bgw = new BackgroundWorker();
bgw.DoWork += (_, __) =>
{
// This Sleep represents time used for an imaginary task :)
Thread.Sleep(5000);
};
bgw.RunWorkerCompleted += (_, __) =>
{
lbl1.Text = "Generated";
};
bgw.RunWorkerAsync();
}
のみタスクが終了したときに "生成" と表示されますが、ない「のGeタスクの開始時に「ネーティング」します。
は、私は代わりにタスクを使用してみました:
protected void btn1_Click(object sender, EventArgs e)
{
lbl1.Text = "Generating";
this.MyTaskEvent += _Default_MyTaskEvent;
Task task1 = Task.Factory.StartNew(new Action(DoWork));
}
private void DoWork()
{
Thread.Sleep(5000);
MyTaskEvent?.Invoke();
}
private void _Default_MyTaskEvent()
{
lbl1.Text = "Generated";
// Response.Redirect("Default.aspx");
}
をしかし、この場合にのみ、「生成」のテキストが表示されますが、それはタスクが終了したとき、「生成」するために変更されません。 また、私はResponse.Redirect( "Default.aspx")を入れてみました。 _Default_MyTaskEvent()の最後に "応答がこのコンテキストでは利用できません"のようなものがあります。
私は思っていたほど簡単ではないと思っています。 何かを忘れている、間違っているとか、これは私が取るべきアプローチではない?