Как реализовать асинхронную загрузку на странице ASP.NET? - PullRequest
2 голосов
/ 10 января 2012

Как реализовать асинхронную загрузку на странице ASP.NET?

У меня есть 3 раздела на моей странице ASP.NET. Все разделы независимы.

LoadSection1();
LoadSection2();
LoadSection3();

Каждый раздел занимает около 15 секунд. Я хочу уменьшить время загрузки страницы с помощью асинхронной загрузки.

Я пробовал с темами

// 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 ]

5 голосов
/ 10 января 2012

Я хотел бы рассмотреть возможность использования AJAX , чтобы пользователь сразу увидел что-то.

1 голос
/ 11 января 2012

Я думаю, что у вас есть несколько относительно простых опций, которые вы можете попробовать, в зависимости от сложности и сложности вашей страницы (т. Е. Статические данные, все ли нужно публиковать и т. Д.):

1) Разделите страницу на три разные страницы, затем добавьте фреймы или фреймы на исходную страницу и перенаправьте фреймы на новые страницы.

2) Разделите страницу на три пользовательских элемента управления и добавьте их на страницу в панелях обновления.

В коде элемента управления не выполняйте действие загрузки при начальной загрузке страницы (т.е. без обратной передачи).

Чтобы загрузить содержимое элемента управления, добавьте javascript к событию window.onload или (page.registerstartupscript), который делает что-то простое, например, нажимает кнопку на панели обновления, чтобы вызвать обратную передачу. Тем не менее, убедитесь, что вы делаете это в window.settimeout для каждого пользовательского элемента управления, чтобы вам не приходилось ждать завершения первого.

Это приведет к асинхронной загрузке пользовательских элементов управления.

...