Открыть файл после завершения загрузки - PullRequest
0 голосов
/ 10 марта 2012

Следующий код не работает, так как я не могу получить значение int из метода 'Completed' в мой метод btn_Start_Click:

private void btn_Start_Click(object sender, EventArgs e)
{
    int completedDownload = 0;      

    WebClient webClient = new WebClient();
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
    webClient.DownloadFileAsync(new Uri("http://somesite.com/file.jpg"), @"c:\file.jpg");

    if (Completed.completeDownload == 1)
    {
        //open the file code goes here.
    }

    //Rest of the code goes here.
    //and here
    //and here
}

private void Completed(object sender, AsyncCompletedEventArgs e)
{
    completedDownload = 1;
}

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

Из замечаний по функции WebClient.DownloadFileAsync:

Файл загружается асинхронно с использованием ресурсов потоков, которые автоматически выделяются из пула потоков.Чтобы получить уведомление о доступности файла, добавьте обработчик события в событие DownloadFileCompleted.

Документация MSDN

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

// Sample call : DownLoadFileInBackground2 ("http://www.contoso.com/logs/January.txt");
public static void DownLoadFileInBackground2 (string address)
{
    WebClient client = new WebClient ();
    Uri uri = new Uri(address);

    // Specify that the DownloadFileCallback method gets called
    // when the download completes.
    client.DownloadFileCompleted += new AsyncCompletedEventHandler (DownloadFileCallback2);
    // Specify a progress notification handler.
    client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback);
    client.DownloadFileAsync (uri, "serverdata.txt");
}

Документация MSDN

1 голос
/ 10 марта 2012

Обработчик Completed выполняется асинхронно. Когда вы проверяете этот int, нет гарантии, что hanlder установил это значение. Если вы хотите выполнить какое-либо действие после завершения загрузки, сделайте это методом Завершено.

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