偶尔显示OpenFileDialog会导致应用程序挂起

大多数情况下,OpenFileDialog不会出现问题,但是在极少数情况下,显示它会导致应用程序不确定地挂起,直到过程结束。

OpenFileDialog的定义如下:

        var dialog = new OpenFileDialog
        {
            ValidateNames = false,CheckFileExists = false,CheckPathExists = true,FileName = "This Folder",};
        if (dialog.ShowDialog() == DialogResult.OK)
        {
            //logic here
        }

对类似问题的回答表明,该问题可能与我的应用程序正在使用的DLL有关。

可能成功运行的相关调试输出如下:

每当程序启动时:

...
'Program Name.exe' (Win32): Loaded 'C:\Windows\SysWOW64\iertutil.dll'. 
'Program Name.exe' (Win32): Loaded 'C:\Windows\SysWOW64\propsys.dll'. 
Exception thrown at 0x74EC3572 in Program Name.exe: microsoft C++ exception: EEFileLoadException at memory location 0x00B3D034.
Exception thrown at 0x74EC3572 in Program Name.exe: microsoft C++ exception: [rethrow] at memory location 0x00000000.
Exception thrown at 0x74EC3572 in Program Name.exe: microsoft C++ exception: [rethrow] at memory location 0x00000000.
'Program Name.exe' (CLR v4.0.30319: Program Name.exe): Loaded 'microsoft.GeneratedCode'. 
'Program Name.exe' (Win32): Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_32\microsoft.V9921e851#\10e86f631668518a182dfda3901d1848\microsoft.VisualBasic.ni.dll'. 
...

第一次在程序运行中显示OpenFileDialog:

...
'Program Name.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sxs.dll'. 
mincore\com\oleaut32\dispatch\ups.cpp(2125)\OLEAUT32.dll!77444221: (caller: 77444318) ReturnHr(1) tid(7cb0) 8002801D library not registered.
'Program Name.exe' (Win32): Loaded 'C:\Windows\SysWOW64\StructuredQuery.dll'. 
...
'Program Name.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp140.dll'. 
'Program Name.exe' (Win32): Loaded 'C:\Windows\SysWOW64\vcruntime140.dll'. 
Exception thrown at 0x74EC3572 in Program Name.exe: microsoft C++ exception: Mso::RegistryException at memory location 0x0B15C968.
Exception thrown at 0x74EC3572 in Program Name.exe: microsoft C++ exception: [rethrow] at memory location 0x00000000.
'Program Name.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msi.dll'. 
...

由于打开OpenFileDialog会使应用程序很少挂起,因此我没有任何调试输出。

当我以其CLI模式运行该应用程序时,以上所有异常均不存在。

我已经尝试研究上述异常消息,但这并没有导致我找到解决方案。

您知道什么可能导致此问题吗?

您对我如何进行问题调试有任何建议?

yyaiwdk1 回答:偶尔显示OpenFileDialog会导致应用程序挂起

那件事也发生在我身上。 这是因为调用openFileDialog的表单是在另一个线程中创建的,但是我仍然不知道为什么会发生。可能的工作方式是:

    var dialog = new OpenFileDialog
    {
        ValidateNames = false,CheckFileExists = false,CheckPathExists = true,FileName = "This Folder",};
    this.Hide();
    if (dialog.ShowDialog() == DialogResult.OK)
    {
        //logic here
    }
    this.Show();
本文链接:https://www.f2er.com/3138243.html

大家都在问