如何在ASP.NET页面中实现异步加载?

时间:2012-01-10 14:38:02

标签: c# asp.net .net multithreading asynchronous

如何在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中实现这一目标?

2 个答案:

答案 0 :(得分:5)

我会考虑使用AJAX,以便用户立即看到某些内容。

答案 1 :(得分:1)

我认为您可以尝试一些相对简单的选项,具体取决于页面的复杂性和复杂性(即是静态数据,所有内容都必须回发等):

1)将您的页面分成三个不同的页面,然后将帧或iframe添加到原始页面并将帧指向新页面。

2)将您的页面分成三个用户控件,并将它们添加到更新面板中的页面。

在控件的代码隐藏中,不要对初始页面加载执行加载操作(即不回发)。

要加载控件内容,请将javascript添加到window.onload事件或(page.registerstartupscript),它可以执行一些简单的操作,例如单击updatepanel中的按钮,以强制进行回发。但是,请确保在window.settimeout中为每个用户控件执行此操作,这样您就不必等待第一个用户控件完成。

这将启动用户控件的异步加载。