页面关闭时运行asp.net函数

时间:2009-07-02 18:56:01

标签: c# asp.net

我有一个asp.net页面 加载此页面时,它会创建一个线程来执行某些操作 我的问题是: 用户关闭页面时如何杀死此线程? 我试过“onUnload”事件 但它只适用于javascript函数(据我所知) 我们不能在javascript函数中使用asp.net代码 你有办法帮助我...... 非常感谢

修改 很难解释我想要做什么.. asp.net页面必须向用户显示一条消息,这条消息必须直接出现而不刷新所以我试图使用一个侦听等待消息的线程然后运行用于显示消息的AJAX代码..

6 个答案:

答案 0 :(得分:1)

你做不到。浏览器和代码隐藏(C#)存在于不同的世界中,一旦页面生命周期完成(RenderComplete之后不久),服务器就完成了请求。
它将生成的HTML发送给客户端,永远不会回头。

在javascript中的onunload事件中,您可以向服务器发送一个AJAX请求,告诉用户该用户正在离开该页面,但这将非常不可靠如果你只依靠它来杀死线程,你手上就会遇到重大问题。

一般来说,你想要完成的事情会以另一种方式更好地完成 - 正如其他人所说的那样,让我们​​知道你要做什么,我们会给出建议。

答案 1 :(得分:1)

您可以使用适用于Ajax的PageMethods

首先,在脚本页面上捕获onunload事件:

body onunload='javascript:PageMethods.UnloadForm();'

然后你在你必须添加到你的页面的scriptManager AJAX上启用PageMethods:

asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" 
    runat="server"

之后,您在C#中创建PageMethods代码隐藏方法:

[System.Web.Services.WebMethod]
    public static void UnloadForm()
    {
// your stuff
}

希望这会对你有所帮助。

我的实际pb是生成Onunload事件而没有关闭我的页面AJAX计时器的原因。但是如果你不添加计时器,你就不应该有这个pb。

答案 2 :(得分:0)

由于您无法控制客户端浏览器上发生的事情,因此启动一个依赖于页面关闭以进行清理的工作线程是一种糟糕的编码实践。也许您可以重新思考这个架构,或者至少阐述一下这个工作线程实际上在做什么,这样就可以推荐一个更好的解决方案。

如果工作线程设置的工作有一个明确的代码完成路径,垃圾收集器将处理清理并且没有理由担心。如果您使用线程池中的线程通过QueueUserWorkItem构造执行后台任务,那么一旦工作完成,线程将使其自身可以在池中再次使用,并且只要您确保无需担心妥善处置非管理资源(如果有的话)。

答案 3 :(得分:0)

页面关闭时没有发送请求,因此开箱即用,答案是否定的。但是,您有几个选择。

一种是从javascript onUnload事件向WebMethod发送XmlHttpRequest(Ajax调用)。

另一个是在下一个页面加载的下一个开头执行代码,除了那些用户离开你的网站或关闭浏览器之外的情况。

最后,您可以使用服务器端事件,例如会话到期。

你正在尝试做什么?也许我们可以帮助找到更好的方法来实现它。

答案 4 :(得分:0)

好奇:你在运行什么样的线程进程?对于你的问题,你将能够捕获浏览器关闭事件的唯一地方是Javascript ...你可以回到服务器的ajax调用来杀死你运行的任何线程会议,但正如其他人所说,这是不可靠的。

简而言之,没有直接的方法可以做你想做的事情。您可能希望的最好的方法是挂钩Sesion_OnEnd事件。

答案 5 :(得分:0)

正如Mike在评论中指出的那样,你应该真正设置一个Web服务,页面上的某些JavaScript可以定期轮询 - 然后这将进行并整理队列,检查消息,如果找到消息,则显示一个消息给用户。

此网站的功能与您回答问题时的功能非常相似 - 它有一个“Heartbeat”javascript调用,可以轮询服务器寻找新的答案 - 如果找到一些,则会在顶部显示橙色消息栏页面告诉你有新的答案,你想查看它们吗?