Может ли BackgroundWorker в Asp.net работать, пока он перемещается на другую страницу? - PullRequest
0 голосов
/ 21 апреля 2011

Я использую Backgroundworker для обработки данных в файле, загруженном пользователем, поэтому это отнимает много времени.В то же время, пользователь хочет перейти на другую страницу, чтобы сделать что-то еще.

Так что мой вопрос, возможно ли, что BackgroundWorker все еще продолжит обрабатывать загруженные данные, пока текущая страница перемещается кдругая страница ??

Если да, то как?Пример кода, предоставленного для ознакомления, приветствуется!

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

BackgroundWorker будет уничтожен, и его работа никогда не будет завершена. Нет никакого пути к этому, ну, нет, нет никакого пути к этому, но если вы используете «способ обойти это», вас будет избегать любой, кто когда-либо увидит ваш код (это включает хранение метаданных в сеансе и десериализацию их при загрузке страницы в продолжить обработку).

Ваш единственный реальный вариант - разделить ваше приложение на несколько частей. Одна страница ASP.NET позволяет загружать файлы и помещает их в каталог. Затем у вас есть служба Windows или какой-то другой процесс, который выполняет необходимые преобразования. Если у вас есть отчет о продвижении службы Windows в базу данных SQL, у вас может быть страница «Состояние», где пользователь может проверить состояние своего загруженного файла.

Если вам нужно сделать все это на одной веб-странице, то вы должны делать то, что делают приложения, подобные Facebook: пока все не будет сделано, вы не можете покинуть страницу.

Я знаю, что это не то, что вы искали, но реальность разработки в Интернете.

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

Вы можете поместить свой код обработки данных на другую страницу и вызвать его асинхронно со страницы, которая выполняет загрузку.

Код песодо:

Page_Load()
{
    UplaoadFileAndSaveSomeWher();

    Call Asynchronous("ProccessorPage.aspx");

    Response.Redirect("Go To Other Place");

...
...
...

}

для асинхронного вызова веб-страницы, которую вы могли быиспользуйте что-то вроде этого:

string url = "http://www.google.com"; 
WebClient client = new WebClient(); 
client.DownloadDataAsync(new Uri(url)); 
...