私はイベントのリストを持つ単純なページを持っています。ボタンをクリックすると、参加者ページに移動し、そのイベントで人を読み込む必要があります。page_loadでかなり単純なasp.net非同期操作がUIをブロックしています
ボタンをクリックすると、すべての出席者の処理が完了して終了してから結果が表示されるまで、イベントページは表示されたままになります。最初の非同期呼び出しのイベント名を最初に表示し、ページ上にある進行状況バーには、作成中の出席者のリストを表示できます。出席者ページをクエリ文字列に直接ロードすると、イベント名が表示され、進行状況バーが正常に動作します。
希望の結果を得るためにこれを設定する方法(非同期noob)がわかりませんし、いくつかのポインタをありがとう! events.aspx.csボタンのクリックハンドラで
:
Response.Redirect("Attendees.aspx?eventID=" + eventID, false);
その後Attendees.aspx.csをPage_Loadで:
protected void Page_Load(object sender, EventArgs e)
{
processEvent();
//I've tried this with .Wait() at the end too
}
private async Task<bool> processEvent()
{
try
{
EFEventDetails efEvent = await getEventByIdAsync();
if (efEvent.responseCode != 200) //only 200 is a valid response code for a found event
{
pnl_loadingError.Visible = true;
pnl_attendees.Visible = false;
}
else
{
//valid event - carry on. Display event name on page.
lbl_EventHeader.Text = efEvent.data.eventID.ToString() + " - " + efEvent.data.eventName;
//Now get list of attendees
List<vmAttendees> res = await getAttendeesAsync();
if (res.Count > 0)
{
pnl_AttendeeList.Visible = true;
rpt_AttendeeList.DataSource = res;
rpt_AttendeeList.DataBind();
}
}
}
catch (Exception ex)
{
lbl_Result.Text = ex.Message;
lbl_Result.ForeColor = System.Drawing.Color.Red;
pnl_processResult.Visible = true;
}
return true;
}
protected async Task<EFEventDetails> getEventByIdAsync()
{
var eventsForceService = new EventsForceService(_eventsForceRepo);
return await eventsForceService.getEventByIdAsync(_eventID);
}
protected async Task<List<vmAttendees>> getAttendeesAsync()
{
var eventsForceService = new EventsForceService(_eventsForceRepo);
return await eventsForceService.GetAttendeesByEventIDAsync(_eventID);
}
これは、作業の進行状況バーを取得する方法のあなたの問題を解決していませんが、あなたが読むべき[この記事](HTTPSあなたは 'RegisterAsyncTask(processEvent());'を呼び出す必要があり、あなたのaspxページが 'Async = 'を持っていることを確認するために、' Page_Load'で行うべき正しいことを見るためには://www.hanselman.com/blog/TheMagicOfUsingAsynchronousMethodsInASPNET45PlusAnImportantGotcha.aspx) "true"は 'Page'要素です。)ページがfuになるまで待つだけなら何かを表示する前にロードされています。 –
Scottに感謝します。私のオリジナルの投稿をチェックすると、ページを直接ロードするだけで、すでにプログレスバーの内容がうまく動作していることがわかります。私はそのためにSignalRとイベントハンドラを使用しています。私はあなたが今投稿した記事を読んでいます。ありがとう。 – TheMook