如何在ASP.NET页面中实现异步加载?
我的ASP.NET页面中有3个部分。所有部分都是独立的。
LoadSection1();
LoadSection2();
LoadSection3();
每个部分大约需要15秒。我想使用异步加载减少页面加载时间。
我尝试使用Threads
// Create thread jobs for each section
ThreadStart PipelinePerformanceThreadJob = new ThreadStart(LoadPipelineSection);
ThreadStart CampaignPerformanceThreadJob = new ThreadStart(LoadCampaignSection);
ThreadStart OperationalThreadJob = new ThreadStart(LoadOperationalSection);
// Create threads
Thread PPThread = new Thread(PipelinePerformanceThreadJob);
Thread CSThread = new Thread(CampaignPerformanceThreadJob);
Thread OSThread = new Thread(OperationalThreadJob);
// Start all the threads
PPThread.Start();
CSThread.Start();
OSThread.Start();
// Join threads with main thread
PPThread.Join();
CSThread.Join();
OSThread.Join();
页面在完成所有线程后加载。但是每当我从线程得到响应时,我都需要显示每个部分的数据。 对于例如如果Thread1完成,我想显示Section1的数据(即使thread2和3仍在运行。)。我怎样才能在.NET中实现这一目标?
答案 0 :(得分:5)
我会考虑使用AJAX,以便用户立即看到某些内容。
答案 1 :(得分:1)
我认为您可以尝试一些相对简单的选项,具体取决于页面的复杂性和复杂性(即是静态数据,所有内容都必须回发等):
1)将您的页面分成三个不同的页面,然后将帧或iframe添加到原始页面并将帧指向新页面。
2)将您的页面分成三个用户控件,并将它们添加到更新面板中的页面。
在控件的代码隐藏中,不要对初始页面加载执行加载操作(即不回发)。
要加载控件内容,请将javascript添加到window.onload事件或(page.registerstartupscript),它可以执行一些简单的操作,例如单击updatepanel中的按钮,以强制进行回发。但是,请确保在window.settimeout中为每个用户控件执行此操作,这样您就不必等待第一个用户控件完成。
这将启动用户控件的异步加载。