Fungsi penyegaran halaman asinkron ASP.NET 2.0 sangat keren. Saya mencoba menggunakannya untuk menyelesaikan masalah aplikasi saya hari ini, dan itu sangat membantu.
Halaman saya perlu mengirimkan kueri ke layanan soket di latar belakang. Pertama-tama, ini adalah operasi yang mungkin tidak akan kembali untuk waktu yang lama. Kedua, untuk mendapatkan panjang variabel dan kemungkinan besar data Respons yang dikembalikan oleh soket layanan, saya harus menggunakan dotNET. ; dalam fungsi panggilan balik untuk mendapatkan data Respons Hingga data diambil, rangkaian fragmen data ini di-cache dalam daftar tertaut MemoryBlock.
Dalam hal ini, jika halaman ASP.NET ingin menampilkan data Respons dalam tabel, halaman tersebut harus di-refresh secara asinkron.
ASP.NET 1.x pada dasarnya tidak mendukung halaman asinkron, namun melalui ketekunan dan inovasi, halaman asinkron dapat dihasilkan. Untuk informasi ikhtisar lebih lanjut, lihat artikel Majalah MSDN® bulan Juni 2003 "Gunakan Thread dan Bangun Pengendali Asinkron di Kode Web Sisi Server Anda," oleh Fritz Onion.
Namun ASP.NET 2.0 sangat menyederhanakan cara menghasilkan halaman asinkron. Pertama-tama gunakan direktif @ Page pada halaman tersebut untuk memperkenalkan atribut Async="true" .
Kedua, saat Page_Load, daftarkan event Page_PreRender:
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
// Jalankan metode saat event registrasi Page_PreRender selesai
// Kaitkan event PreRenderComplete untuk pengikatan data
ini .PreRenderComplete += EventHandler baru(Page_PreRenderComplete);
Selanjutnya, saya memulai perjalanan operasi asinkron dalam fungsi acara klik tombol:
/// Metode PageAsyncTask adalah versi yang disempurnakan selain metode awal dan akhir pemrosesan halaman asinkron itu sendiri,
/// juga dapat memberikan batas waktu Metode pemrosesan situasi, dan objek status saat memproses.
///
Tugas PageAsyncTask = PageAsyncTask baru(
BeginEventHandler baru(BeginSubmitKeywordsAsyncOperation),
EndEventHandler baru(EndSubmitKeywordsAsyncOperation),
EndEventHandler baru(TimeoutSubmitKeywordsAsyncOperation),
null
)
;
/// Untuk sebagian besar situasi pemrosesan asinkron yang sederhana, Anda dapat langsung memanggil metode AddOnPreRenderCompleteAsync,
/// Kirimkan kode pemrosesan di awal dan akhir permintaan halaman
//AddOnPreRenderCompleteAsync(
// new BeginEventHandler(BeginSubmitKeywordsAsyncOperation),
// new EndEventHandler (EndSubmitKeywordsAsyncOperation)
//);
Halaman melewati siklus hidup pemrosesan normal hingga tepat setelah peristiwa PreRender dimunculkan. Kemudian, ASP.NET memanggil metode Begin BeginSubmitKeywordsAsyncOperation yang didaftarkan menggunakan RegisterAsyncTask. Dalam metode ini, saya akan mengirimkan perintah saya ke layanan sokcet, dan kemudian mengembalikan objek IasyncResult yang diperoleh dengan metode socket.BeginReceive ke ASP.NET.
Kemudian, setelah fungsi panggilan balik asinkron soket saya akhirnya mendapatkan semua aliran data,
ia memberi tahu halaman bahwa soket telah menyelesaikan pekerjaannya
dengan memanggilcallback.Invoke(result);.
Jadi ASP.NET memanggil metode EndSubmitKeywordsAsyncOperation:
/// <summary>
/// Metode penerima setelah panggilan asinkron selesai (setelah operasi asinkron selesai, sebuah thread akan diambil dari kumpulan thread untuk melayani permintaan halaman ).
/// </summary>
/// <param name="ar"></param>
void EndSubmitKeywordsAsyncOperation(IAsyncResult ar)
{
_resultDataset =_submit.getResultDataset
(ar);
.
Setelah itu, ASP.NET memanggil kembali event Page_PreRender, sehingga pada event ini tabel pada halaman tersebut dapat terisi dengan benar.
Dengan cara ini, tujuan saya tercapai. Selain itu, jika waktu tunggu untuk pengaktifan kembali setelah pengiriman ke latar belakang habis,
void TimeoutSubmitKeywordsAsyncOperation(IAsyncResult ar)
juga dapatdigunakan untuk menanganinya dengan tepat.
Sumber referensi:
1:
Halaman asinkron di 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