天天看點

Response.Flush的使用心得

  (1)Flush的内容至少要有256位元組

  很多時候我們寫的asp程式會因為做很多操作,是以會花上一分鐘甚至幾分鐘時間。為了使軟體使用者能夠耐心的等待程式的執行,我們經常會希望有一個進度條來表示程式執行的狀态。或者最起碼要顯示一個類似: “資料載入中”,“正在儲存資料” 等的說明性文字。此時我們就會用到Response.flush()。他會将緩沖區中編譯完成的資料先發送到用戶端。

  但是有很多時候,我們發現即使我們使用了Response.Flush(),但是并沒有将前面的資訊發到用戶端來顯示。呈獻給我們的依然是白屏。經過反複的測試,我得出一個結論(僅代表個人觀點,可随意引用,但後果自負)。就是flush的内容至少要有256位元組。也就是隻有編譯産生了至少256位元組的資料,才能在執行Response.Flush()以後将資訊發到用戶端并顯示。

<html>

<body>

<%

  Call TestFlush ''Flush測試

%>

</body>

</html>

  ''=================================================

  Sub DoSomeThing    ''模拟一個背景操作

      For i=1 To 10000000

            None = i

      Next

  End Sub

  Function LongSpaceStr()  ''制造一個長空字元串

    LongSpaceStr = ""

      For i=1 To 256

            LongSpaceStr = LongSpaceStr& " "

  End Function

  Sub TestFlush ''Flush測試

      '用LongSpaceStr加長輸出内容,以使Flush生效

      Response.Write(LongSpaceStr&"正在執行操作,請等待..."&Now())

      Response.Flush()

      Call DoSomeThing

      Response.Write("<br>操作成功完成!"&Now())

      Response.Flush() 

  (2)Response.Flush()調用之前不能出現未閉合的HTML标簽(<html> ,<body>除外)

   比如,以下代碼經測試是不行的:  

<table ID="MyTable"><tr><td>

</td></tr></table>

''......略去與上例中同樣的代碼......

  以下代碼經測試是可行的: 

<table ID="MyTable"><tr><td></td></tr></table>

  以下代碼經測試也是可行的: 

--------沒有在ASP.NET下做類似測試,道理應該是一樣。---------

繼續閱讀