关于使用调试器,您将学到的一件事是,您将看到我们可能称之为系统的“柔软的白色下腹部”(暗指鳄鱼的解剖结构):加载和卸载各种 DLL,有些复杂正在启动和停止的“帮助”线程的安排......等等。
看到所有这些消息可能会分散经验不足的用户的注意力。但是,随着时间的推移,您会明白调试器只是真实而冗长。它为您显示的详细信息可能与您的调试过程并不真正相关,但它无法“知道”这一点;它只是显示事实信息,你必须理清哪些是相关的,哪些是不相关的。
至于 Windows 窗体应用程序,我自己注意到似乎有几个“帮助”线程,通常没有名称,或者(正如我在调试时经常看到的那样),它们被命名为“vshost.RunParkingWindow”之类的东西。通常,除了您可能自己创建的任何线程之外,您还必须相信系统正在代表您创建线程。正如其他人所建议的那样,给您自己的线程起有意义的名称,这样您就可以将它们与系统线程区分开来。
您可以通过在 UI 更新代码中的某处放置一个断点来进一步了解 Windows 窗体应用程序的多线程结构,当它命中时,使用 Debug/Windows/Threads 显示在您的进程空间中运行的所有线程的视图. 你会很惊讶,我想,有多少!尝试在您的应用程序中一一创建并 .Show()-ing 多个表单。我想您会看到每个 .Show() 操作都会创建一个新窗口,并使用它为该窗口创建几个支持线程。
您还可能会在调试窗口中看到如下消息:“System.Windows.Forms.dll 中发生了 'System.ObjectDisposedException' 类型的第一次机会异常”。很多时候,系统异常处理程序会代表您执行合理的默认操作。在调试器中出现此消息时没有中断,这表明某些默认处理程序已为您处理了此异常。
对 Windows 窗体应用程序之类的系统支持有些复杂,以使您的实现更容易和更简单。当您运行调试器时,您会看到其中的一些详细信息。随着时间的推移,您将了解什么是“常见的”以及什么是问题的指示。