当我运行代码时,response.write 之前的线程进程!为什么以及如何使它们按顺序排列?
insertUser.ExecuteNonQuery()
con.Close()
Response.Write("Done successfully ...")
Thread.Sleep(4000)
Response.Redirect("Default.aspx")
响应是 Web 应用程序中的一次性事件。你不能“回应一点,做点别的,再回应一些”。当您考虑Response.Redirect()
修改响应标头之类的内容时尤其如此。(基本上,Response.Redirect()
将完全“破坏”您添加到响应中的任何内容,以便用户永远不会看到它。)
看起来您在这里尝试做的是:
有几种标准方法可以实现这一点。您可以使用包含步骤 1 的页面进行响应,该页面在客户端代码中执行步骤 2 和 3,或者您可以在服务器端代码中执行步骤 3,然后在第二个页面上执行步骤 1(可能还有两个,隐藏几秒钟后的消息)。
例如,假设您想在页面 A 上显示消息,等待几秒钟,然后将用户发送到页面 B。然后在页面 A 中您可能包含如下内容:
<script type="text/javascript">
$(function() {
$('#dialog-message').dialog({
modal: true,
buttons: {
Ok: function() {
$(this).dialog('close');
}
},
close: function() {
window.location.href='Default.aspx';
}
});
});
</script>
<div id="dialog-message">Done successfully ...</div>
使用 jQuery,它的作用是向用户显示一个带有预期消息的对话框(使用jQuery UI 对话框),当用户关闭对话框时,它会执行重定向。
您可以在代码中使用客户端功能来完成此操作,请参考以下链接
Web Response只有在webrequest处理完成后才会出现在页面上,即代码执行完成后才能看到响应。所以你的代码执行了正确的顺序。你可以通过insert Response.End()方法测试它,如下所示
insertUser.ExecuteNonQuery()
con.Close()
Response.Write("Done successfully ...")
Response.End();
Thread.Sleep(4000)
Response.Redirect("Default.aspx")