Ookii-dialogs-wpf: Colgando a menos que se ejecute bajo el depurador

Creado en 25 nov. 2019  ·  3Comentarios  ·  Fuente: ookii-dialogs/ookii-dialogs-wpf

Cuando trato de usar VistaFolderBrowserDialog en mi aplicación WPF .NET 4.6.1, cuelga la aplicación. Si lo ejecuto bajo el depurador (en modo Debug o Release), funciona muy bien.

Intenté reproducir esto en la aplicación de muestra cambiando varias llamadas y cambiando al paquete Nuget, todavía funciona bien.

Intenté simplificar la forma en que llamo a VistaFolderBrowserDialog y copié / pegué el código de muestra en mi aplicación, pero todavía se cuelga.

¿Alguna idea sobre por qué o cómo localizar el problema?

need-more-info

Comentario más útil

Gracias por responderme rápidamente, @augustoproiete. Probé varios pasos de reproducción para explorar cosas. Voy a intentar agregar más uso a mis otras aplicaciones de WPF para ver si hay algún factor común que pueda identificar por qué no funciona.

Ingresé un poco y lo reproduje en mi aplicación, el bloqueo está en int result = dialog.Show(owner); en private bool RunDialog(IntPtr owner)

Todos 3 comentarios

Hola @matelich , no puedo reproducir el comportamiento de suspensión que describiste.

Se adjunta un proyecto de muestra de una aplicación WPF que usa .NET 4.6.1 que abre VistaFolderBrowserDialog usando Ookii.Dialogs.Wpf v1.1.0 (_ más reciente al momento de escribir este artículo_) y pude ejecutar un:

  • Debug build _sin_ el depurador adjunto
  • Debug build _with_ el depurador adjunto
  • Release build _sin_ el depurador adjunto
  • Release build _with_ el depurador adjunto

No se produjo ningún ahorcamiento ni excepción.

Si me puede proporcionar una forma de reproducir el comportamiento de suspensión, estaría encantado de investigar más a fondo.

El código relevante en la muestra adjunta:

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


Gracias por responderme rápidamente, @augustoproiete. Probé varios pasos de reproducción para explorar cosas. Voy a intentar agregar más uso a mis otras aplicaciones de WPF para ver si hay algún factor común que pueda identificar por qué no funciona.

Ingresé un poco y lo reproduje en mi aplicación, el bloqueo está en int result = dialog.Show(owner); en private bool RunDialog(IntPtr owner)

parece relacionado:
Estoy experimentando lentitud cuando la ruta seleccionada es una ruta de red larga.

Si habilito Native code debugging , veo que la mayor parte del tiempo se gasta en algún lugar de esta pila de llamadas:

win32u.dll!NtUserMsgWaitForMultipleObjectsEx

() Desconocido
user32.dll! RealMsgWaitForMultipleObjectsEx () Desconocido
shell32.dll! SHProcessMessagesUntilEventsEx () Desconocido
shell32.dll! CChangeRouterProxy :: RegisterThread () Desconocido
shell32.dll! SHChangeNotifyRegisterThread
() Desconocido
comdlg32.dll! CFileOpenSave :: Show () Desconocido
[Transición administrada a nativa]
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog (propietario de System.IntPtr) Línea 171 C #
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog (propietario de System.Windows.Window) Línea 157 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog () Línea 166 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click (remitente del objeto, System.Windows.RoutedEventArgs e) Línea 56 C #

o:

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#

o:

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

() Desconocido
ntdll.dll! RtlpDereferenceAtom () Desconocido
ntdll.dll! RtlDeleteAtomFromAtomTable () Desconocido
kernel32.dll! InternalDeleteAtom
() Desconocido
dui70.dll! DirectUI :: Value :: _ ZeroRelease () Desconocido
dui70.dll! DirectUI :: DUIXmlParser :: _ DestroyTables (void) Desconocido
dui70.dll! DirectUI :: DUIXmlParser :: ~ DUIXmlParser () Desconocido
dui70.dll! DirectUI :: DUIXmlParser :: `vector eliminando destructor '() Desconocido
dui70.dll! DirectUI :: AccHDelete(clase DirectUI :: RefcountBase *) Desconocido
shell32.dll! _DUI_ShellStyleSheet_UninitThreadIfPossible (void) Desconocido
shell32.dll! DUI_ShellStyleSheet_UninitThread (void) Desconocido
shell32.dll! CDUIViewFrame :: DestroyFrameWindow (void) Desconocido
shell32.dll! CExplorerBrowser :: _ CleanupFrame (void) Desconocido
shell32.dll! CExplorerBrowser :: Destroy () Desconocido
comdlg32.dll! CFileOpenSave :: _ OnDestroyDialog () Desconocido
comdlg32.dll! CFileOpenSave :: s_OpenSaveDlgProc () Desconocido
user32.dll! UserCallDlgProcCheckWow () Desconocido
user32.dll! DefDlgProcWorker () Desconocido
user32.dll! DefDlgProcW
() Desconocido
user32.dll! UserCallWinProcCheckWow () Desconocido
user32.dll! DispatchClientMessage () Desconocido
user32.dll! __ fnDWORD
() Desconocido
ntdll.dll! KiUserCallbackDispatcherContinue
() Desconocido
win32u.dll! NtUserDestroyWindow
() Desconocido
user32.dll! DialogBox2 () Desconocido
user32.dll! InternalDialogBox () Desconocido
user32.dll! DialogBoxIndirectParamAorW
() Desconocido
user32.dll! DialogBoxIndirectParamW
() Desconocido
comdlg32.dll! CFileOpenSave :: Show () Desconocido
[Transición administrada a nativa]
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog (propietario de System.IntPtr) Línea 171 C #
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog (propietario de System.Windows.Window) Línea 157 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog () Línea 166 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click (remitente del objeto, System.Windows.RoutedEventArgs e) Línea 56 C #

¿Fue útil esta página
0 / 5 - 0 calificaciones