我试图了解,当WinForms应用程序关闭时,WebClient未完成的异步操作究竟发生了什么。我实际上没有问题,我的问题是由了解确切流程的愿望所驱动。
当请求下载时,该应用程序使用以下模式:
using (WebClient wc = new WebClient())
{
wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(my_DownloadProgressChanged);
wc.DownloadFileCompleted += new AsyncCompletedEventHandler(my_DownloadFileCompleted);
事件处理程序是Form上的方法。我关心的问题之一是,我不希望在窗体已关闭时调用它们。我可以保留对WebClient的引用,并在窗体上关闭-=,但是我不想做不必要的工作以避免新问题。
以下是我的问题:
我查看了WebClient代码,但无法弄清楚这些内容。预先感谢。
答案 0 :(得分:1)
为什么可以在异步操作完成之前处理WebClient?
从Reference Source的角度来看,WebClient似乎实际上没有为Dispose方法提供任何特定的实现。处置任何IDisposable并期望异步操作成功完成应该是不安全的,但是在这种情况下,由于部署Web客户端不做任何事情来中止打开的连接,它可能会起作用。
关于您在应用程序退出时会发生什么的问题,操作系统将在进程结束时终止所有打开的连接。