Ookii-dialogs-wpf: Menggantung kecuali dijalankan di bawah debugger

Dibuat pada 25 Nov 2019  ·  3Komentar  ·  Sumber: ookii-dialogs/ookii-dialogs-wpf

Ketika saya mencoba menggunakan VistaFolderBrowserDialog di aplikasi WPF .NET 4.6.1 saya, aplikasi hang. Jika saya menjalankannya di bawah debugger (dalam mode Debug atau Rilis) itu berfungsi dengan baik.

Saya sudah mencoba mengulangi ini di aplikasi sampel dengan mengubah berbagai panggilan dan beralih ke paket Nuget, masih berfungsi dengan baik.

Saya telah mencoba menyederhanakan cara saya memanggil VistaFolderBrowserDialog dan menyalin/menempelkan kode sampel ke aplikasi saya, masih hang.

Adakah pemikiran tentang mengapa atau bagaimana melacak masalah ini?

need-more-info

Komentar yang paling membantu

Terima kasih telah menghubungi saya dengan cepat, @augustoproiete. Saya memang mencoba berbagai langkah repro untuk menjelajahi berbagai hal. Akan mencoba menambahkan lebih banyak penggunaan ke aplikasi WPF saya yang lain untuk melihat apakah ada beberapa faktor umum yang mungkin mengidentifikasi mengapa itu tidak berfungsi.

Saya memasukkan beberapa login dan mereproduksi dalam aplikasi saya, hang ada di int result = dialog.Show(owner); di private bool RunDialog(IntPtr owner)

Semua 3 komentar

Hai @matelich, saya tidak dapat mereproduksi perilaku menggantung yang Anda gambarkan.

Terlampir adalah contoh proyek aplikasi WPF menggunakan .NET 4.6.1 yang membuka VistaFolderBrowserDialog menggunakan Ookii.Dialogs.Wpf v1.1.0 (_terbaru pada tulisan ini_) dan saya dapat menjalankan:

  • Debug build _tanpa_ debugger terpasang
  • Debug build _dengan_ debugger terpasang
  • Release build _tanpa_ debugger terpasang
  • Release build _dengan_ debugger terpasang

Tidak ada gantung atau pengecualian yang terjadi.

Jika Anda dapat memberi saya cara untuk mereproduksi perilaku menggantung, saya akan dengan senang hati menyelidiki lebih lanjut.

Kode yang relevan dalam contoh terlampir:

var dialog = new VistaFolderBrowserDialog
{
    Description = "Please select a folder.",
    UseDescriptionForTitle = true,
};

if (!VistaFolderBrowserDialog.IsVistaFolderDialogSupported)
{
    MessageBox.Show(this,
        "You are using an old Windows version. The regular folder browser dialog will open.",
        "Sample folder browser dialog");
}

if (dialog.ShowDialog(this).GetValueOrDefault(false))
{
    MessageBox.Show(this, "The selected folder was: " + dialog.SelectedPath,
        "Sample folder browser dialog");
}

image

image


Terima kasih telah menghubungi saya dengan cepat, @augustoproiete. Saya memang mencoba berbagai langkah repro untuk menjelajahi berbagai hal. Akan mencoba menambahkan lebih banyak penggunaan ke aplikasi WPF saya yang lain untuk melihat apakah ada beberapa faktor umum yang mungkin mengidentifikasi mengapa itu tidak berfungsi.

Saya memasukkan beberapa login dan mereproduksi dalam aplikasi saya, hang ada di int result = dialog.Show(owner); di private bool RunDialog(IntPtr owner)

tampaknya terkait:
Saya mengalami kelambatan ketika jalur yang dipilih adalah jalur jaringan yang panjang.

Jika saya mengaktifkan Native code debugging , saya melihat bahwa sebagian besar waktu dihabiskan di suatu tempat di tumpukan panggilan ini:

win32u.dll!NtUserMsgWaitForMultipleObjectsEx

() Tidak dikenal
user32.dll!RealMsgWaitForMultipleObjectsEx() Tidak Diketahui
shell32.dll!SHProcessMessagesUntilEventsEx() Tidak Diketahui
shell32.dll!CChangeRouterProxy::RegisterThread() Tidak Diketahui
shell32.dll!SHChangeNotifyRegisterThread
() Tidak dikenal
comdlg32.dll!CFileOpenSave::Show() Tidak Diketahui
[Berhasil ke Transisi Asli]
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(Pemilik System.IntPtr) Baris 171 C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window owner) Baris 157 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() Baris 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click(pengirim objek, System.Windows.RoutedEventArgs e) Baris 56 C#

atau:

win32u.dll!00007ff9d17c9164()   Unknown
user32.dll!00007ff9d2ca059d()   Unknown
shell32.dll!SHProcessMessagesUntilEventsEx()    Unknown
shell32.dll!CChangeRouterProxy::RegisterThread()    Unknown
shell32.dll!SHChangeNotifyRegisterThread()  Unknown
comdlg32.dll!CFileOpenSave::Show()  Unknown
[Managed to Native Transition]  
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(System.IntPtr owner) Line 171    C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window owner) Line 157   C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() Line 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click(object sender, System.Windows.RoutedEventArgs e) Line 56   C#

atau:

ntdll.dll!RtlpHashStringToAtom()    Unknown
ntdll.dll!RtlpFreeAllAtom

() Tidak dikenal
ntdll.dll!RtlpDereferenceAtom() Tidak Diketahui
ntdll.dll!RtlDeleteAtomFromAtomTable() Tidak Diketahui
kernel32.dll!InternalDeleteAtom
() Tidak dikenal
dui70.dll!DirectUI::Nilai::_ZeroRelease() Tidak Diketahui
dui70.dll!DirectUI::DUIXmlParser::_DestroyTables(void) Tidak diketahui
dui70.dll!DirectUI::DUIXmlParser::~DUIXmlParser() Tidak Diketahui
dui70.dll!DirectUI::DUIXmlParser::`vektor menghapus destructor'() Tidak diketahui
dui70.dll!DirectUI::AccHDelete(kelas DirectUI::RefcountBase *) Tidak diketahui
shell32.dll!_DUI_ShellStyleSheet_UninitThreadIfPossible(void) Tidak diketahui
shell32.dll!DUI_ShellStyleSheet_UninitThread(void) Tidak diketahui
shell32.dll!CDUIViewFrame::DestroyFrameWindow(void) Tidak diketahui
shell32.dll!CExplorerBrowser::_CleanupFrame(void) Tidak diketahui
shell32.dll!CExplorerBrowser::Destroy() Tidak Diketahui
comdlg32.dll!CFFileOpenSave::_OnDestroyDialog() Tidak Diketahui
comdlg32.dll! CFileOpenSave::s_OpenSaveDlgProc() Tidak Diketahui
user32.dll!UserCallDlgProcCheckWow() Tidak Diketahui
user32.dll!DefDlgProcWorker() Tidak Diketahui
user32.dll!DefDlgProcW
() Tidak dikenal
user32.dll!UserCallWinProcCheckWow() Tidak Diketahui
user32.dll!DispatchClientMessage() Tidak Diketahui
user32.dll!__fnDWORD
() Tidak dikenal
ntdll.dll!KiUserCallbackDispatcherLanjutkan
() Tidak dikenal
win32u.dll!NtUserDestroyWindow
() Tidak dikenal
user32.dll!DialogBox2() Tidak Diketahui
user32.dll!InternalDialogBox() Tidak Diketahui
user32.dll!DialogBoxIndirectParamAorW
() Tidak dikenal
user32.dll!DialogBoxIndirectParamW
() Tidak dikenal
comdlg32.dll!CFileOpenSave::Show() Tidak Diketahui
[Berhasil ke Transisi Asli]
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(Pemilik System.IntPtr) Baris 171 C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window owner) Baris 157 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() Baris 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click(pengirim objek, System.Windows.RoutedEventArgs e) Baris 56 C#

Apakah halaman ini membantu?
0 / 5 - 0 peringkat