скачать файл из сети в фоновом режиме в wp7 - PullRequest
1 голос
/ 19 февраля 2012

Я пишу приложение на c # для wp7: 2 страницы [главная страница, вторая страница].
Приложение запускается на главной странице, затем пользователь может перейти на вторую страницу (используя NavigationService.Navigate) на второй странице.

На второй странице WebClient загружает файл в изолированном хранилище.

Моя проблема в том, что загрузка зависает, когда пользователь возвращается на главную страницу с помощью клавиши возврата!

Есть ли способ сделать это в фоновом режиме, чтобы пользователь мог свободно перемещаться по страницам?

Вот код класса второй страницы (в событии щелчка также есть кнопка с webClient.OpenReadAsync (uri)).

public partial class SecondPage : PhoneApplicationPage
{
    WebClient webClient = new WebClient();
    IsolatedStorageFile Storage = IsolatedStorageFile.GetUserStoreForApplication();

    public SecondPage()
    {
        InitializeComponent();
        webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
        webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
    }
    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        try
        {
            if (e.Result != null)
            {
                string fileName = "download.txt";
                IsolatedStorageFileStream f = new IsolatedStorageFileStream(fileName, System.IO.FileMode.Create, Storage);
                long fileNameLength = (long)e.Result.Length;
                byte[] byteImage = new byte[fileNameLength];
                e.Result.Read(byteImage, 0, byteImage.Length);
                f.Write(byteImage, 0, byteImage.Length);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        try
        {
            if (ProgressDownload.Value <= ProgressDownload.Maximum)
            {
                ProgressDownload.Value = (double)e.ProgressPercentage;
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

Спасибо

с классом BackgroundWorker у меня есть эта проблема: когда я вызываю webClient.OpenReadAsync, функция bw_doWork (код находится под) заканчивается, потому что этот вызов асинхронный!таким образом, bw сообщает о совершенном событии.

    private void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

        WebClient webClient = new WebClient();
        webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
        webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);


        webClient.OpenReadAsync(new Uri("http://foo.com/asd.txt"));

    }

1 Ответ

0 голосов
/ 20 февраля 2012

Ознакомьтесь с API для фоновой передачи - похоже, это именно то, что вам нужно для выполнения ваших требований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...