我正在使用C#在Visual Studio 2008中编写(如果这有所不同)并且我有以下代码片段:
if(saveFileDialog1.ShowDialog() == DialogResult.OK)
{
//Write Stuff to File Here
}
有一段时间我认为编写该文件的代码是永远的,但是在调试时,它似乎需要永远(5到10秒)才能在“if”语句和第一个代码的第一个代码之间步进“如果”。
我有什么问题吗?在UI中创建saveFileDialog对象与在运行中创建它(通过代码)之间有什么区别吗?如果没有“其他”陈述,它会有所作为吗?
非常感谢任何想法或想法!
答案 0 :(得分:1)
这并不罕见,在许多机器上,当您使用该对话框时,会有大量DLL加载到您的进程中。您可以通过使用Project + Properties,Debug选项卡看到它们被加载,勾选“启用非托管代码调试”复选框。 “输出”窗口显示了蠕虫进入程序的每个DLL的跟踪。
这些是shell扩展,Explorer的自定义。您使用的对话框是一个shell对话框,您肯定会识别与常规资源管理器视图的相似性。图标和上下文菜单之类的行为表现相同。安装了大量shell扩展在开发人员的机器上很常见,比用户机器更常见。它们中有很多,提供了诸如集成您喜欢的任何工具与Explorer本身一样的便利。
调试问题并不容易,您将无法获得这些扩展的实际源代码。您可能会从“输出”窗口中的跟踪中获得有关故障排除程序的提示。如果在一个特定的DLL之后有一个很长的暂停,那么这个DLL是问题的根源的几率很高。没什么可靠的。
更好的方法是使用SysInternals的AutoRuns实用程序。它会准确显示安装了哪些shell扩展,并允许您通过单击复选框禁用它们。开始禁用任何没有Microsoft版权的内容以及没有内容的内容。需要注销+登录才能使更改生效。