2015-03-27 1 views
3

Я действительно застрял в этом, мне нужно знать ho, чтобы отменить загрузку изображения в wpf. ниже приведен код, который я использую для загрузки. request.Abort() не работает, отображается исключение, но изображение все еще загружается.Как отменить загрузку в C# WPF-приложении

private static HttpWebResponse PostForm(string postUrl, string userAgent, string contentType, byte[] formData) 
    { 
     request = WebRequest.Create(postUrl) as HttpWebRequest; 

     if (request == null) 
     { 
      throw new NullReferenceException("request is not a http request"); 
     } 

     request.Method = "POST"; 
     request.ContentType = contentType; 
     request.UserAgent = userAgent; 
     request.CookieContainer = new CookieContainer(); 
     request.ContentLength = formData.Length; 

     using (Stream requestStream = request.GetRequestStream()) 
     { 
      requestStream.Write(formData, 0, formData.Length); 
      requestStream.Close(); 

     } 
     GlobalManagement.isCancelingUpload = false; 
     var response = request.GetResponse() as HttpWebResponse; 
     request = null; 
     return response; 
    } 
+0

Request.Abort() не работает? Какое исключение возникает? Не могли бы вы опубликовать этот вывод? – Joze

+0

Возможно, вы должны сделать загрузку в кусках ..... взгляните на AllowWriteStreamBuffering = false и SendChunked ... как на некоторые возможные идеи ... лично не знаете, достаточно ли знать, являются ли они решениями ..https: //msdn.microsoft.com/en-us/library/system.net.httpwebrequest.sendchunked(v=vs.110).aspx ... http://asemenko-web.sharepoint.com/blog/Lists/Posts /Post.aspx?ID=18 –

ответ

0

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

Возможно, вы можете убить его, указав свойство Timeout искусственно, чтобы сделать его таймаутом. Это, скорее всего, прервет его. Timeout Property

Другая альтернатива - убить процесс, я бы сказал, что он запускает его в новом AppDomain и отбрасывает AppDomain, когда вы хотите убить запрос; вместо прерывания потока внутри вашего основного процесса.

Вы также можете использовать метод BeginGetResponse, а затем использовать метод прерывания в классе запроса. Я сомневаюсь, что Abort будет работать с snynchronous GetResponse.

+1

получается не внутри BeginGetResponse, но внутри BeginGetRequestStream я устанавливаю timeout = 1 в потоке, который я получаю от EndGetRequestStream. спасибо за ваш ответ, он дает мне ключ к решению этого вопроса. – Utbu