异步添加内容(线程+ ajax)

时间:2010-03-09 21:19:19

标签: c# ajax multithreading updatepanel

好的,我喜欢做的是加载显示90%内容的页面,并异步加载最后10%。

当我渲染页面时,我以编程方式创建了一个更新面板,我将其传递给一个线程。当该线程完成时,然后更新主线程上的updatepanel。

public void test(object parameter)
{
    Thread.Sleep(2000);
    var updpanel = (UpdatePanel)parameter;
    updpanel.ContentTemplateContainer.Controls.Add(new LiteralControl("HI"));
    updpanel.Update();
}
protected void Page_Load(object sender, EventArgs e)
{
    var th = new Thread(new ParameterizedThreadStart(test));
    var updpanel = new UpdatePanel() { UpdateMode = UpdatePanelUpdateMode.Conditional };
    ContentPlaceHolder1.Controls.Add(updpanel);
    th.Start(updpanel);
}

如果没有这个,在单线程方法中,我是否只是继续轮询页面以查看它是否已经完成?

2 个答案:

答案 0 :(得分:2)

要记住的一件事是,尽管ASP.Net开发看起来与Windows开发密切相关,但是有一个很大的区别:处理请求的代码大部分时间都是在一小部分时间内执行的。第二步和完成...在这个例子中,一旦主线程完成,生成的页面已经被发送到请求者,让你的辅助线程在你的服务器的后台运行,在一个已经发出的页面上工作

您可能需要做的是生成90%的页面,然后将其发送出去。在你的页面上,你将需要使用ajax,在页面加载(对于客户端),从服务器请求其他10%...你可能想要使用像jquery这样的库来执行javascript,并在服务器端设置Web服务来处理请求。

答案 1 :(得分:1)

您无法在服务器上以这种方式使用线程。在处理页面之后,您的第二个线程可能无法完成,并且请求生命周期已完成。

取决于您要实现的目标:您是否需要在服务器端并行处理数据,您应该查看Asynchronous Pages in ASP.Net 2.0

另一种方法是呈现页面(当你调用它时为“90%”)并在客户端上使用ajax来请求其他数据。