当 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?
- 我们是否必须在主 window 关闭时取消注册处理程序,以及什么
如果我们不这样做会怎样?我的观察是,如果我关闭表单,none
调用了异步回调,但究竟是为什么,究竟是如何调用的
关机?
我查看了 WebClient 代码,但我无法弄清楚这些东西。提前致谢。
why is it ok to Dispose WebClient before Async operations complete?
查看 WebClient 的 Reference Source,看起来它实际上没有 Dispose 方法的任何具体实现。 不应该 处置任何 IDisposable 并期望异步操作成功完成,但在这种情况下它可能会工作,因为处置 Web 客户端不会做任何事情来中止打开连接。
关于您关于应用程序退出时会发生什么的问题,操作系统将在进程结束时终止所有打开的连接。
我想了解,当 WinForms 应用程序关闭时,WebClient 未完成的异步操作到底发生了什么。我实际上没有问题,我的问题是想了解确切的流程。
应用程序在请求下载时使用以下模式:
using (WebClient wc = new WebClient())
{
wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(my_DownloadProgressChanged);
wc.DownloadFileCompleted += new AsyncCompletedEventHandler(my_DownloadFileCompleted);
事件处理程序是表单上的方法。我担心的问题之一是我不希望在表单已经关闭时调用它们。我可以保留对 WebClient 和 -= 的引用,但我不想做不必要的工作以避免新问题。
以下是我的问题:
- 为什么可以在异步操作完成之前处理 WebClient?
- 我们是否必须在主 window 关闭时取消注册处理程序,以及什么 如果我们不这样做会怎样?我的观察是,如果我关闭表单,none 调用了异步回调,但究竟是为什么,究竟是如何调用的 关机?
我查看了 WebClient 代码,但我无法弄清楚这些东西。提前致谢。
why is it ok to Dispose WebClient before Async operations complete?
查看 WebClient 的 Reference Source,看起来它实际上没有 Dispose 方法的任何具体实现。 不应该 处置任何 IDisposable 并期望异步操作成功完成,但在这种情况下它可能会工作,因为处置 Web 客户端不会做任何事情来中止打开连接。
关于您关于应用程序退出时会发生什么的问题,操作系统将在进程结束时终止所有打开的连接。