很小的问题把我卡住了,求救。

cahcahcah 2010-12-30 02:02:01
protected void Button1_Click(object sender, EventArgs e)
{
Button1.Text = "等待下面的提示框...";
Thread.Sleep(2000);
Response.Write("<script>alert('OK')</script>");
Button1.Text = "提示完成";
}

为什么每次执行都先Sleep(2000),然后弹出提示框,紧接着执行下面的 Button1.Text = "提示完成";

总是不会执行最上面的 Button1.Text = "等待下面的提示框..." 看不到效果。

谁能告诉我下解决方案??
...全文
278 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
cahcahcah 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 laj0600310219 的回复:]

你单步跟踪调试一下看啊。。。说不定已经执行了。。。。
[/Quote]
执行时肯定的,百分之百的,这个我晓得。
laj0600310219 2010-12-30
  • 打赏
  • 举报
回复
你单步跟踪调试一下看啊。。。说不定已经执行了。。。。
cahcahcah 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 li277680701 的回复:]

不好意思原来是webform,你这里很明显要用javascript。html在发送到服务器之前会被保存在缓冲区,你这里直接sleep很明显是让服务器睡了会。而不是浏览器睡了会。现在浏览器睡了。但是html还没有发送到浏览器,浏览器还在等
[/Quote]

给个详细的实例可以吗?
  • 打赏
  • 举报
回复
不好意思原来是webform,你这里很明显要用javascript。html在发送到服务器之前会被保存在缓冲区,你这里直接sleep很明显是让服务器睡了会。而不是浏览器睡了会。现在浏览器睡了。但是html还没有发送到浏览器,浏览器还在等
  • 打赏
  • 举报
回复
新开个进程,你这里直接睡的是主线程
pgameli 2010-12-30
  • 打赏
  • 举报
回复
在页面上面写一个javascript 函数,函数里面给这个文本框赋值“等待下面的提示框...”
点击这个按钮的时候调用这个js就行了
netharry 2010-12-30
  • 打赏
  • 举报
回复
当然不行了,一个是客户端程序,一个是服务器端程序。现在这种编程方法已经过时了。要用AJAX
zouhuiyong 2010-12-30
  • 打赏
  • 举报
回复
说通俗点吧
你这个方法里有两个为text赋值,而赋值的效果是需要发送到浏览器才会显示出效果的。
所以,只有第二个赋值才会起作用。
你sleep时,只是服务器端的代码sleep了一下,并没有发回到浏览器端。
cahcahcah 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangoqoq 的回复:]

这个不是个小问题 这个与 C/S B/S实现机制有关系 2中不同的实现机制,显然楼主是将2者混为一谈了 想要实现这种效果 必须通过JS实现 获取换成HTML控件 仅仅靠服务器控件 是无法实现楼主想要的效果的 我这有个例子 楼主可以借鉴借鉴:
实现的效果是 在按钮执行过程中 如果再次点击 会提示
<asp:Button ID="btnSave" run……
[/Quote]
好像看不到效果~
每次提交都会提示,第一次也会。
cahcahcah 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhjackey 的回复:]

可以考虑使用AjaxPro,用异步的方法
[/Quote]

有实例吗?
cahcahcah 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wulinshe 的回复:]

Button1.Text = "等待下面的提示框...";
button1.Refresh();
Thread.Sleep(2000);
Response.Write("<script>alert('OK')</script>");
Button1.Text = "提示完成";
[/Quote]

Button好像不包含Refresh()的定义?
JustLovePro 2010-12-30
  • 打赏
  • 举报
回复
要采用异步的方式才能实现你要的功能
flowfog 2010-12-30
  • 打赏
  • 举报
回复
10楼的方法OK
wulinshe 2010-12-30
  • 打赏
  • 举报
回复
Button1.Text = "等待下面的提示框...";
button1.Refresh();
Thread.Sleep(2000);
Response.Write("<script>alert('OK')</script>");
Button1.Text = "提示完成";
wulinshe 2010-12-30
  • 打赏
  • 举报
回复
Button1.Text = "等待下面的提示框...";
button12.Refresh();
Thread.Sleep(2000);
Response.Write("<script>alert('OK')</script>");
Button1.Text = "提示完成";
极地_雪狼 2010-12-30
  • 打赏
  • 举报
回复
这个需要在客户端接收服务器的信息的。WEB是pull的技术,不是push的技术。
zhjackey 2010-12-30
  • 打赏
  • 举报
回复
可以考虑使用AjaxPro,用异步的方法
wangoqoq 2010-12-30
  • 打赏
  • 举报
回复
这个不是个小问题 这个与 C/S B/S实现机制有关系 2中不同的实现机制,显然楼主是将2者混为一谈了 想要实现这种效果 必须通过JS实现 获取换成HTML控件 仅仅靠服务器控件 是无法实现楼主想要的效果的 我这有个例子 楼主可以借鉴借鉴:
实现的效果是 在按钮执行过程中 如果再次点击 会提示
<asp:Button ID="btnSave" runat="server" Text="保存" OnClick="btnSave_Click" OnPreRender="btnSave_PreRender" />
protected void btnSave_PreRender(object sender, EventArgs e)
{
((Button)sender).Attributes.Add("realvalue", "0");
((Button)sender).Attributes.Add("onclick", "this.realvalue ++;if(this.realvalue==1){return true;this.disabled=true;}else{alert('已经提交,请不要重复点击!');return(false);}");
}
快溜 2010-12-30
  • 打赏
  • 举报
回复
在button事件里,给Button1.text赋值是在点完button之后才会赋值,也就是点击后,不是点击前,也不是点击中,你点击中停了两秒,然后先赋第一个值,再第二个赋值,所以你只看到第二个,第一个来不及看
Button1.Text = "等待下面的提示框...";写在Thread.Sleep(2000)前后没区别
helloderek 2010-12-30
  • 打赏
  • 举报
回复
这不能说是小问题
是很重要的概念问题
Thread.Sleep(2000);
是服务器停2秒
全执行完了才会开始给客户端发送响应
你如果想要这个效果
需要使用xmlhttp(或者ajax)的方式异步请求
根据readyState在客户端用js来处理按钮文字
加载更多回复(2)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧