2012-02-05 52 views
2

我使用C#(如果有差别),我有下面的代码片段在Visual Studio 2008中写:saveFileDialog陇上“好”确认等待

if(saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    //Write Stuff to File Here 
} 

有一段时间,我想我编写这个文件的代码是永久存在的,但是在调试时,它似乎需要永久(5到10秒)才能在if语句和“if”中的第一个代码的第一个括号之间步入。

有什么我做错了吗?在UI中创建saveFileDialog对象与在动态创建它(通过代码)之间是否有区别?如果没有“其他”陈述,它会有所作为吗?

任何想法或想法将不胜感激!

+0

'saveFileDialog1'是什么类型? – BrokenGlass 2012-02-05 21:50:36

+0

您是否已经在机器上映射了网络驱动器?如果是这样,并且它们很慢或断开连接,那么在下面创建“保存文件”对话框的Win32 API可能需要比平时更长的时间。 – 2012-02-05 22:02:43

+0

@BrokenGlass:我不确定“type”是什么意思。它是System.Windows.Forms.SaveFileDialog。 @ Mike:我所有的网络驱动器都已连接。如果我必须(以某种方式)将saveFileDialog缩小到它们的C:/ Drive – Demasterpl 2012-02-06 15:29:54

回答

1

这并不罕见,在许多机器上,当您使用该对话框时,大量的DLL会加载到您的进程中。您可以使用Project + Properties,Debug选项卡查看它们是否已加载,请勾选“启用非托管代码调试”复选框。 “输出”窗口显示每个DLL的痕迹,这些DLL会蠕动到您的程序中。

这些是外壳扩展,Explorer的自定义。您使用的对话框是一个外壳对话框,您肯定会认识到与常规资源管理器视图的相似性。像图标和上下文菜单的行为是相同的。在开发人员的机器上安装了大量的shell扩展,这比用户机器更常见。其中有很多这样的内容,提供了诸如将任何你喜欢的工具集成到资源管理器本身的便利。

调试问题并不是那么容易,你不会有这些扩展的实际源代码。您可能会从输出窗口中的跟踪中获得关于麻烦制造者的提示。如果在一个特定的DLL之后有很长的停顿,那么这个DLL就是问题的根源。尽管如此,没有什么可靠的

更好的方法是使用SysInternals的AutoRuns实用程序。它显示了你正确安装了哪些shell扩展,并允许你通过简单地点击一个复选框来禁用它们。开始禁用任何不具有Microsoft版权的内容,以及无法使用的内容。需要注销+登录才能使更改生效。

+0

因此,如果我正确地理解了你,那是因为我的计算机很好地被攻击了?检查“启用非托管代码调试”复选框带来了一个“安全”弹出窗口几乎告诉我“不”。我不能让这个弹出窗口再次出现。 – Demasterpl 2012-02-06 16:21:07

+0

是的,“gunk”在这里是合适的词。 – 2012-02-06 16:30:21