【发布时间】:2014-07-10 14:38:43
【问题描述】:
我有一个执行长时间运行过程的按钮,所以我想重定向到成功页面,直到过程完成,这里是一个代码示例:
Response.Redirect("Page_URL", false);
Thread.Sleep(100000);
问题:页面不会立即重定向,它会等待 100 秒然后重定向。
有什么想法吗?
【问题讨论】:
标签: asp.net redirect webforms response.redirect
我有一个执行长时间运行过程的按钮,所以我想重定向到成功页面,直到过程完成,这里是一个代码示例:
Response.Redirect("Page_URL", false);
Thread.Sleep(100000);
问题:页面不会立即重定向,它会等待 100 秒然后重定向。
有什么想法吗?
【问题讨论】:
标签: asp.net redirect webforms response.redirect
第二个参数如果设置为true,会立即结束响应并重定向。 True 将导致在重定向之后不再执行任何代码,但由于您将其设置为 false,其余代码将执行,然后重定向将发生,这就是您遇到延迟的原因。更多信息请见MSDN:
当您在页面处理程序中使用此方法终止对 一页并开始对另一页的新请求,将 endResponse 设置为 false 然后调用 CompleteRequest 方法。如果您指定 true 对于 endResponse 参数,此方法调用 End 方法 引发 ThreadAbortException 异常的原始请求 当它完成时。此异常对 Web 有不利影响 应用程序性能,这就是为什么为 推荐使用 endResponse 参数。有关详细信息,请参阅 结束方法。
如果您希望在长流程之后发生重定向,您应该设置一些东西以在流程完成时触发重定向,例如通过 ajax 调用执行长流程并轮询进度然后重定向。
【讨论】:
让长进程在不同的线程上工作,然后它会立即重定向。
或者,您可以使用 ajax 并向用户显示进度,然后重定向到成功页面(如果长时间的过程失败并且您不希望您的用户看到失败的成功消息,这将很有帮助)
【讨论】:
Tasks 或Threads,我误解了EndResponse 的工作原理,谢谢。
这段代码成功了。
Response.Redirect(“Page_URL”, false);
var t = Task.Factory.StartNew(() =>
{
// your code here
});
【讨论】: