如何在一个循环未完前就输出信息?即一边循环一边显示,而不是等全部循环完了再显示 如何在一个循环未完前就输出信息?即一边循环一边显示,而不是等全部循环完了再显示。比如:for(int i=0;i<10000;++i){ response.write(i);} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Response.Flush.不过这只是对于很简单的显示而已。最靠谱的措施还是尽快将全部内容显示完。最流行的解决方案是(对于前端开发而言)改变思路,基于javascript上编程,而不是基于服务器去编程。 后台代码protected string names = "";前台代码<div class="divtop"> <% for (int i; i < 1000;i++ ) { names = i.ToString(); %> <%= names %> <% } %> </div> 使用情景就是这样啊。我后来在前台用ajax请求这个方法,想在前台动态得看到0,1,2,3,4,5,。但还是不行,还是得后台方法循环全部完成后才输出。 ……算了给你个例子吧,网上的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; } } 求。给文章关键字加链接函数。非常复杂。 新手求助!!在Button 事件下 返回查询结果 绑定到GridView中 在线等!! asp.net.内网组建高清电影点播问题 判断字符数的代码 关于AutoComplete实现输入框提示的问题 datagrid导出页脚 [提问]关于命名空间的问题 请问asp.net怎样引用它能够获取上传文件的创建时间、修改时间? 我想让添加数据时某字段不能有重复 该怎么办? [求助]偶需要一个无限树型模块,谁有,请提供 【html框架】如何让框架在窗口中居中 函数回调问题
Response.Flush.不过这只是对于很简单的显示而已。最靠谱的措施还是尽快将全部内容显示完。最流行的解决方案是(对于前端开发而言)改变思路,基于javascript上编程,而不是基于服务器去编程。
protected string names = "";前台代码<div class="divtop">
<% for (int i; i < 1000;i++ )
{
names = i.ToString();
%>
<%= names %>
<%
}
%>
</div>
……
算了给你个例子吧,网上的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;
}
}