.NET服務端持續輸出信息到客戶端


由於有時查詢內容時間長,可以將查詢內容逐一顯示出來,以達到用戶可以提前查看部分內容的形式來提高用戶的體驗,那么asp.net如何實現連續不斷向客戶端顯示內容?

首先在此,我們不討論客戶端Ajax拉拽的方式解決此問題!提供如下兩種方式:

方式一(推薦使用):

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
#region 命名空間

using System.Threading;
using System.Text;

#endregion

namespace ContinuousExport
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //由於asp.net持續輸出到客戶端
            //注意:(IE內核瀏覽器)下需要字符達到256個字符以上(可以提前輸出樣式,控制后面信息樣式)
            //才能想客戶端即時發送新的信息
            StringBuilder sbResponse = new StringBuilder();
            sbResponse.Append("<style type=\"text/css\">span{color:Red;}</style>");
            while (sbResponse.Length < 257)
            {
                sbResponse.Append(" ");
            }
            Response.Write(sbResponse.ToString());
            Response.Flush();
            int j = 0;
            while (true)
            {
                j++;
                Response.Write("<span>" + j + "</span>\t");
                Response.Flush();
                //1秒輸送一次(模擬復雜計算耗時)
                Thread.Sleep(1000);
            }
        }
    }
}

顯示效果截圖如下:

瀏覽器:搜高高速瀏覽器(兼容模式)--兼容模式為IE內核瀏覽器

效果:每隔一秒鍾顯示一個數字的效果--此時頁面仍然在加載狀態

 

 

方式二(不推薦,原因:使用重載Render方法,不能在繼續對服務器控件指定相關信息,如賦值等...):

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
#region 命名空間

using System.Threading;
using System.Text;

#endregion

namespace ContinuousExport
{
    public partial class ExportMain : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(writer);
            //輸出后面信息的樣式
            Response.Write("<style type=\"text/css\">span{color:Red;}</style>");
            Response.Flush();
            int j = 0;
            while (true)
            {
                j++;
                Response.Write("<span>" + j + "</span>\t");
                Response.Flush();
                //1秒輸送一次(模擬復雜計算耗時)
                Thread.Sleep(1000);
            }
        }
    }
}

顯示效果如上圖。

附上源碼:ContinuousExport.zip

作者:曾慶雷
出處:http://www.cnblogs.com/zengqinglei
本頁版權歸作者和博客園所有,歡迎轉載,但未經作者同意必須保留此段聲明, 且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM