ASP.NET 2.0 の非同期ページ更新機能は非常に優れており、今日アプリケーションの問題を解決するためにそれを使用してみましたが、非常に役に立ちました。
私のページは、まず、ソケットから返される可変長の、場合によっては大きな応答データを取得するために、バックグラウンドでソケット サービスにクエリを送信する必要があります。サービスを使用するには、dotNET メソッドを使用する必要があります。 ; コールバック関数内で応答データを取得します。データがフェッチされるまで、この一連のデータ フラグメントは MemoryBlock リンク リストにキャッシュされます。
この場合、ASP.NET ページで応答データをテーブルに表示したい場合は、非同期的に更新する必要があります。
ASP.NET 1.x は本質的に非同期ページをサポートしませんが、忍耐と革新によって非同期ページを生成できます。概要情報の詳細については、2003 年 6 月の MSDN® マガジンの記事「Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code」(Fritz Onion 著) を参照してください。
ただし、ASP.NET 2.0 では、非同期ページを生成する方法が大幅に簡素化されています。まず、ページの @ Page ディレクティブを使用して、Async="true" 属性を導入します。
次に、Page_Load 時に、イベント Page_PreRender を登録します。
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
// 登録イベント Page_PreRender が完了したときにメソッドを実行します
// データ バインディング用の PreRenderCompleteイベント
をフックします
.PreRenderComplete += 新しい EventHandler(Page_PreRenderComplete);
次に、ボタン クリック イベント関数で非同期操作を開始しました
。 /// PageAsyncTask メソッドは、非同期ページ処理の開始メソッドと終了メソッド自体に加えて、
/// タイムアウト処理メソッドも提供できます。状況の、および処理時のステータス オブジェクト。
///
PageAsyncTask task = new PageAsyncTask(
new BeginEventHandler(BeginSubmitKeywordsAsyncOperation),
new EndEventHandler(EndSubmitKeywordsAsyncOperation),
new EndEventHandler(TimeoutSubmitKeywordsAsyncOperation),
null
)
;
/// ほとんどの単純な非同期処理状況では、AddOnPreRenderCompleteAsync メソッドを直接呼び出すことができます。
/// ページ リクエストの最初と最後に処理コードを送信します。
//AddOnPreRenderCompleteAsync(
// new BeginEventHandler(BeginSubmitKeywordsAsyncOperation),
// new EndEventHandler (EndSubmitKeywordsAsyncOperation)
//);
ページは、PreRender イベントが発生した直後まで、通常の処理ライフサイクルを経ます。次に、ASP.NET は、RegisterAsyncTask を使用して登録された Begin メソッド BeginSubmitKeywordsAsyncOperation を呼び出します。このメソッドでは、コマンドを sokcet サービスに送信し、socket.BeginReceive メソッドによって取得された IasyncResult オブジェクトを ASP.NET に返します。
次に、ソケットの非同期コールバック関数が最終的にすべてのデータ ストリームを取得した後、
callback.Invoke(result);
を呼び出してソケットが作業を完了したことをページに通知します
。したがって、ASP.NET は EndSubmitKeywordsAsyncOperation メソッドを呼び出します。
///
/// 非同期呼び出しが完了した後の受信メソッド (非同期操作が完了すると、ページ要求を処理するためにスレッド プールからスレッドが取得されます) ).
///
///
void EndSubmitKeywordsAsyncOperation(IAsyncResult ar)
{
_resultDataset =_submit.getResultDataset
(ar);
。
その後、ASP.NET は Page_PreRender イベントを再度呼び出し、このイベントでページ上のテーブルに正しく入力できるようにします。
こうして私の目的は達成されました。さらに、バックグラウンドに送信した後の再アクティブ化の待機がタイムアウトになった場合は、
void TimeoutSubmitKeywordsAsyncOperation(IAsyncResult ar) を
使用して適切に処理することもできます。
参考リソース:
1:
ASP.NET 2.0 の非同期ページ
http://www.microsoft.com/china/msdn/library/webservices/asp.net/issuesWickedCodetoc.mspx?mfr=true
http://www.cnblogs.com /zhengyun_ustc/archive/2006/08/08/asp_net_2_0_pageasynctask.html