好的,我喜欢做的是加载显示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);
}
如果没有这个,在单线程方法中,我是否只是继续轮询页面以查看它是否已经完成?
答案 0 :(得分:2)
要记住的一件事是,尽管ASP.Net开发看起来与Windows开发密切相关,但是有一个很大的区别:处理请求的代码大部分时间都是在一小部分时间内执行的。第二步和完成...在这个例子中,一旦主线程完成,生成的页面已经被发送到请求者,让你的辅助线程在你的服务器的后台运行,在一个已经发出的页面上工作
您可能需要做的是生成90%的页面,然后将其发送出去。在你的页面上,你将需要使用ajax,在页面加载(对于客户端),从服务器请求其他10%...你可能想要使用像jquery这样的库来执行javascript,并在服务器端设置Web服务来处理请求。
答案 1 :(得分:1)
您无法在服务器上以这种方式使用线程。在处理页面之后,您的第二个线程可能无法完成,并且请求生命周期已完成。
取决于您要实现的目标:您是否需要在服务器端并行处理数据,您应该查看Asynchronous Pages in ASP.Net 2.0。
另一种方法是呈现页面(当你调用它时为“90%”)并在客户端上使用ajax来请求其他数据。