2013-11-25 2 views
0

Привет, у меня есть следующий код C# для загрузки изображения при нажатии кнопки.Загрузка изображения с использованием webclient не работает

private void DownloadCover() 
{ 
    try 
    { 
     string SaveFileLocation = AppDomain.CurrentDomain.BaseDirectory + "\\data\\covers\\test.jpg" ; 
     WebClient webClient = new WebClient(); 
     string cURL = "http://upload.wikimedia.org/wikipedia/commons/4/45/Right-facing-Arrow-icon.jpg"; 
     webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted); 
     webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged); 
     webClient.DownloadFileAsync(new Uri(cURL), SaveFileLocation); 
     webClient.Dispose(); 
    } 
    catch (Exception exd) 
    { 
     ErrorLogger.LogError(exd.ToString()); 
    } 

} 

private void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
{ 
    lbStatus.Text = "Downloading Cover..." + e.ProgressPercentage + "%"; 
} 

private void DownloadCompleted(object sender, AsyncCompletedEventArgs e) 
{ 
    try 
    { 
     lbStatus.Text = "Download Complete"; 
     string CoverPath = AppDomain.CurrentDomain.BaseDirectory + "\\data\\covers\\test.jpg"; 
     coverImage.Image = new Bitmap(CoverPath); 

    } 
    catch (Exception ex) 
    { 
     ErrorLogger.LogError(ex.ToString()); 
    } 
} 

private void btnDownloadImage_Click(object sender, EventArgs e) 
{ 

    DownloadCover(); 
} 

Когда кнопка нажата, код никогда не получает, чтобы выполнить изменение выполнения загрузки метод DownloadProgressChanged обработки. Всякий раз, когда нажимается кнопка, она мгновенно переходит к методу DownloadComplete и печатает «Загрузка завершена» в ярлыке. Я попытался загрузить изображение с переменным размером без везения. Я не знаю, что не так с моим кодом. Может кто-нибудь, пожалуйста, помогите мне здесь?

Благодаря

+0

mmmh, я не думаю, что вы сможете делать то, что хотите. В основном, чтобы обновить ваш lbstatus.Text, вам нужно отправить ответ клиенту, но чтобы отправить ответ, вам нужен запрос ... Я никогда не использовал асинхронный код на стороне сервера, но, как я вижу вы можете использовать его только для обновления базы данных или отправки почты или чего-либо, но отправки еще раз ответа на клиента ... –

+0

@Bartdude, обновление метки не является моей проблемой, код не загружает изображение вообще. – WatsMyName

ответ

4

Вы не можете распоряжаться веб-клиента до завершения асинхронной операции. Просто поставьте вызов Dispose в свой Download_Complete (и ошибку и все такое), и он должен работать.

0

Извините, ребята,

Я нашел проблему. Я не удаляю эту нить, так как кто-то может пнуть в подобную глупую ошибку в будущем.

Проблема была. Файл test.jpg использовался, и веб-клиент не смог перезаписать файл, который уже используется.

Спасибо всем за усилия.

Смежные вопросы