繁体   English   中英

WinForm应用程序关闭时,未完成的.NET WebClient异步操作会如何处理?

[英]What happens to outstanding .NET WebClient async operations when WinForm app closes?

我试图了解,当WinForms应用程序关闭时,WebClient未完成的异步操作究竟发生了什么。 我实际上没有问题,我的问题是由了解确切流程的愿望所驱动。

当请求下载时,该应用程序使用以下模式:

        using (WebClient wc = new WebClient())
        {
                wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(my_DownloadProgressChanged);
                wc.DownloadFileCompleted += new AsyncCompletedEventHandler(my_DownloadFileCompleted);

事件处理程序是窗体上的方法。 我关心的问题之一是,我不希望在窗体已关闭时调用它们。 我可以保留对WebClient的引用,并在窗体上关闭-=,但是我不想做不必要的工作以避免出现新问题。

这是我有的问题:

  • 为什么可以在异步操作完成之前处理WebClient?
  • 我们必须在关闭主窗口时注销处理程序,如果不注册,该怎么办? 我的观察是,如果我关闭表单,则不会调用任何异步回调,但是为什么要关闭它呢?

我查看了WebClient代码,但无法弄清楚。 提前致谢。

为什么可以在异步操作完成之前处理WebClient?

从WebClient的参考源来看,它实际上没有为Dispose方法提供任何特定的实现。 不应该是安全的处置任何IDisposable接口,并期望异步操作成功完成,但在这种情况下,可能发生的工作,因为配置web客户端没有做任何事情来中止打开的连接。

关于您有关应用程序退出时会发生什么的问题,当进程结束时,操作系统将终止所有打开的连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM