如何在一个循环未完前就输出信息?即一边循环一边显示,而不是等全部循环完了再显示。比如:
for(int i=0;i<10000;++i)
{
    response.write(i);
}

解决方案 »

  1.   


    Response.Flush.不过这只是对于很简单的显示而已。最靠谱的措施还是尽快将全部内容显示完。最流行的解决方案是(对于前端开发而言)改变思路,基于javascript上编程,而不是基于服务器去编程。
      

  2.   

    后台代码
    protected string names = "";前台代码<div class="divtop">
            <% for (int i; i < 1000;i++ )
               {
                   names = i.ToString();               
            %> 
            <%= names %>
            <%
                }
             %>
        </div>
      

  3.   

    使用情景就是这样啊。我后来在前台用ajax请求这个方法,想在前台动态得看到0,1,2,3,4,5,。但还是不行,还是得后台方法循环全部完成后才输出。
      

  4.   


    ……
    算了给你个例子吧,网上的asynchcalpi,虽然是winform的,其实思路是一样的
     [STAThread]
            static void Main()
            {
                Application.Run(new Form1());
            }        delegate void ShowProgressDelegate(string pi, int totalDigits, int digitsSoFar, out bool cancel);        void ShowProgress(string pi, int totalDigits, int digitsSoFar, out bool cancel)
            {
                // Make sure we're on the right thread
                if (_pi.InvokeRequired == false)
                {
                    _pi.Text = pi;
                    _piProgress.Maximum = totalDigits;
                    _piProgress.Value = digitsSoFar;                // Check for Cancel
                    cancel = (_state == CalcState.Canceled);                // Check for completion
                    if (cancel || (digitsSoFar == totalDigits))
                    {
                        _state = CalcState.Pending;
                        _calcButton.Text = "Calc";
                        _calcButton.Enabled = true;                }
                }
                // Transfer control to correct thread
                else
                {
                    ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);
                    object inoutCancel = false; // Avoid boxing and losing our return value                // Show progress synchronously (so we can check for cancel)
                    Invoke(showProgress, new object[] { pi, totalDigits, digitsSoFar, inoutCancel });
                    cancel = (bool)inoutCancel;                // Show progress asynchronously
                    //BeginInvoke(showProgress, new object[] { pi, totalDigits, digitsSoFar, inoutCancel});
                }
            }        void CalcPi(int digits)
            {
                bool cancel = false;
                StringBuilder pi = new StringBuilder("3", digits + 2);            // Show progress (ignoring Cancel so soon)
                ShowProgress(pi.ToString(), digits, 0, out cancel);            if (digits > 0)
                {
                    pi.Append(".");                for (int i = 0; i < digits; i += 9)
                    {
                        int nineDigits = NineDigitsOfPi.StartingAt(i + 1);
                        int digitCount = Math.Min(digits - i, 9);
                        string ds = string.Format("{0:D9}", nineDigits);
                        pi.Append(ds.Substring(0, digitCount));                    // Show progress (checking for Cancel)
                        ShowProgress(pi.ToString(), digits, i + digitCount, out cancel);
                        if (cancel) break;
                    }
                }
            }        delegate void CalcPiDelegate(int digits);        private void _calcButton_Click(object sender, System.EventArgs e)
            {
                // Synch method
                //            CalcPi((int)_digits.Value);
                //            return;            // Calc button does double duty as Cancel button
                switch (_state)
                {
                    // Start a new calculation
                    case CalcState.Pending:
                        // Allow canceling
                        _state = CalcState.Calculating;
                        _calcButton.Text = "Cancel";                    // Asynch delegate method
                        CalcPiDelegate calcPi = new CalcPiDelegate(CalcPi);
                        calcPi.BeginInvoke((int)_digits.Value, null, null);
                        break;                // Cancel a running calculation
                    case CalcState.Calculating:
                        _state = CalcState.Canceled;
                        _calcButton.Enabled = false;
                        break;                // Shouldn't be able to press Calc button while it's canceling
                    case CalcState.Canceled:
                        Debug.Assert(false);
                        break;
                }
            }