【问题标题】:How TO Cancel Upload in c# WPF app如何在 c# WPF 应用程序中取消上传
【发布时间】:2015-05-31 14:16:51
【问题描述】:

我真的被困在这个问题上,我需要知道如何取消在 wpf 中上传图像。下面是我用来上传的代码。 request.Abort() 不起作用,显示异常,但图片仍在上传。

    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;
    }

【问题讨论】:

标签: c# wpf upload httpwebrequest cancellation


【解决方案1】:

要中止请求,您可以尝试在单独的线程中发出请求,然后在您想取消它时中止线程。这可能会向服务器发出请求已中止的信号,随后请求将被中止。

或者您可以通过人为指定 Timeout 属性使其超时来终止它。这很可能会中止它。 Timeout Property

另一种选择是终止进程,我认为在新的 AppDomain 中启动它并在您想要终止请求时删除 AppDomain;而不是在主进程中中止线程。

您也可以使用BeginGetResponse 方法,然后在请求的类中使用abort 方法。我怀疑Abort 是否可以与同步的GetResponse 一起使用。

【讨论】:

  • 结果不是在 BeginGetResponse 内部,而是在 BeginGetRequestStream 内部,我在从 EndGetRequestStream 获得的流中设置了 timeout=1。感谢您的回答,它给了我解决这个问题的线索。
猜你喜欢
  • 2014-07-23
  • 2016-07-07
  • 2018-11-12
  • 1970-01-01
  • 2014-05-22
  • 2012-09-20
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
相关资源
最近更新 更多