[英]Showing an OpenFileDialog occasionally causes the application to hang
大多數時候,OpenFileDialog 顯示沒有問題,但在極少數情況下,顯示它會導致應用程序無限期掛起,直到進程結束。
OpenFileDialog 定義如下:
var dialog = new OpenFileDialog
{
ValidateNames = false,
CheckFileExists = false,
CheckPathExists = true,
FileName = "This Folder",
};
if (dialog.ShowDialog() == DialogResult.OK)
{
//logic here
}
對類似問題的回答表明該問題可能與我的應用程序正在使用的 DLL 有關。
成功運行的可能相關調試 output 如下:
每當啟動程序時:
...
'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 很少會導致應用程序掛起,因此我沒有針對此類運行的任何調試 output。
當我在其 CLI 模式下運行應用程序時,不存在上述異常。
我曾嘗試研究上述異常消息,但這並沒有讓我找到解決方案。
你知道什么可能導致這個問題嗎?
您對我如何繼續調試問題有什么建議嗎?
這也發生在我身上。 發生這種情況是因為調用 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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.