Отображение OpenFileDialog иногда приводит к зависанию приложения - PullRequest
0 голосов
/ 08 ноября 2019

В большинстве случаев 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.

Я пытался исследовать вышеупомянутые сообщения об исключениях, но это непривел меня к решению.

Знаете ли вы, что может быть причиной этой проблемы?

Есть ли у вас какие-либо предложения поКак я могу продолжить отладку проблемы?

1 Ответ

0 голосов
/ 08 ноября 2019

Это случилось со мной тоже. Это произошло потому, что форма, которая вызывала 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();
...