C# 使用AJAX的线程

C# 使用AJAX的线程,c#,javascript,ajax,multithreading,C#,Javascript,Ajax,Multithreading,当用户点击一个链接来生成报告时,我会进行一个AJAX调用,在后台生成一个pdf文件。现在文件很大,运行速度高达10mb或更多。因此这需要一些时间。同时,用户应该能够像什么都没有发生一样浏览其他链接。因此,我需要以这样的方式实现pdf生成过程开始&用户不必等待过程完成。这可能吗?我正在使用AJAX Pro和c#with dot net framework 2.0 这里的问题是,一旦AJAX活动开始,浏览器就进入挂起阶段&用户必须等待,尽管他单击了另一个链接。当然,但是一旦用户导航到另一个页面,等待

当用户点击一个链接来生成报告时,我会进行一个AJAX调用,在后台生成一个pdf文件。现在文件很大,运行速度高达10mb或更多。因此这需要一些时间。同时,用户应该能够像什么都没有发生一样浏览其他链接。因此,我需要以这样的方式实现pdf生成过程开始&用户不必等待过程完成。这可能吗?我正在使用AJAX Pro和c#with dot net framework 2.0


这里的问题是,一旦AJAX活动开始,浏览器就进入挂起阶段&用户必须等待,尽管他单击了另一个链接。

当然,但是一旦用户导航到另一个页面,等待AJAX响应的Javascript将不再运行,因此请求将丢失。您必须找到保持该页面打开的方法(使用框架或专用Ajaxified导航),或者找到存储响应并在下一个页面视图中通知用户其完成的方法。例如,存储一个表示操作已完成的会话变量,或者使用(可能)一个“未读”布尔值将其存储在数据库中。

我可能会为用户创建一个“队列”或“收件箱”

使用ThreadPool.QueueUserWorkItem启动pdf生成例程(您还需要修改生成方法以输出到收件箱)


然后在每个http请求上检查该收件箱并通知用户该项目。。。您可以始终在某个时间间隔或某个时间点轮询服务器,您可以使用异步Ajax调用,在响应对象从Ajax页面返回时,您可以使用该调用执行其他任务。 下面是一些示例,testAjax.aspx是此处的Ajax页面:

http_request.onreadystatechange = function() { alertContents(http_request); };
http_request.open('GET', 'testAjax.aspx?', true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.send(null);

function alertContents(http_request)
{//debugger;
    if (http_request.readyState == 4)
    {
        if (http_request.status == 200)
        {
            var vResult;
            vResult=http_request.responseText;    
            //Write your logic after successful Ajax call here.                
        }
        else
        {
            alert('There was a problem with the request.');
        }
    }
}

是的。但我的问题是浏览器进入了挂起阶段&用户最终不得不等待。我想分离它。而且响应对我也没有用。啊,在这种情况下,你需要一个工作线程。查看下面ObeseCoder的答案,它将导致ASP.NET运行时生成一个单独的线程来执行该操作,并让主线程返回,而不必等待它完成。