Ookii-dialogs-wpf: Pendurado a menos que seja executado no depurador

Criado em 25 nov. 2019  ·  3Comentários  ·  Fonte: ookii-dialogs/ookii-dialogs-wpf

Quando tento usar o VistaFolderBrowserDialog em meu aplicativo WPF .NET 4.6.1, ele trava o aplicativo. Se eu executá-lo no depurador (no modo Debug ou Release), ele funciona muito bem.

Tentei reproduzir isso no aplicativo de amostra, alterando várias chamadas e mudando para o pacote Nuget, ainda funciona bem.

Tentei simplificar como estou chamando o VistaFolderBrowserDialog e copiar / colar o código de amostra em meu aplicativo, ainda trava.

Alguma ideia do porquê ou de como rastrear o problema?

need-more-info

Comentários muito úteis

Obrigado por entrar em contato comigo rapidamente, @augustoproiete. Tentei várias etapas de reprodução para explorar as coisas. Vou tentar adicionar mais uso em meus outros aplicativos WPF para ver se há algum fator comum que possa identificar por que ele não funciona.

Eu joguei algum login e reproduzi em meu aplicativo, o travamento está em int result = dialog.Show(owner); em private bool RunDialog(IntPtr owner)

Todos 3 comentários

Ei @matelich, não consigo reproduzir o comportamento de enforcamento que você descreveu.

Em anexo está um projeto de amostra de um aplicativo WPF usando .NET 4.6.1 que abre o VistaFolderBrowserDialog usando Ookii.Dialogs.Wpf v1.1.0 (o mais recente no momento desta escrita_) e eu consegui executar um:

  • Debug build _sem_ o depurador anexado
  • Debug build _with_ o depurador anexado
  • Release build _sem_ o depurador anexado
  • Release build _with_ o depurador anexado

Nenhum travamento ou exceção ocorreu.

Se você puder me fornecer uma maneira de reproduzir o comportamento de enforcamento, ficarei feliz em investigar mais a fundo.

O código relevante no exemplo em anexo:

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


Obrigado por entrar em contato comigo rapidamente, @augustoproiete. Tentei várias etapas de reprodução para explorar as coisas. Vou tentar adicionar mais uso em meus outros aplicativos WPF para ver se há algum fator comum que possa identificar por que ele não funciona.

Eu joguei algum login e reproduzi em meu aplicativo, o travamento está em int result = dialog.Show(owner); em private bool RunDialog(IntPtr owner)

parece relacionado:
Sinto lentidão quando o caminho selecionado é um caminho de rede longo.

Se eu ativar Native code debugging , vejo que a maior parte do tempo é gasto em algum lugar nesta pilha de chamadas:

win32u.dll!NtUserMsgWaitForMultipleObjectsEx

() Desconhecido
user32.dll! RealMsgWaitForMultipleObjectsEx () Desconhecido
shell32.dll! SHProcessMessagesUntilEventsEx () Desconhecido
shell32.dll! CChangeRouterProxy :: RegisterThread () Desconhecido
shell32.dll! SHChangeNotifyRegisterThread
() Desconhecido
comdlg32.dll! CFileOpenSave :: Show () Desconhecido
[Transição Gerenciado para Nativo]
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog (System.IntPtr owner) Linha 171 C #
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog (System.Windows.Window owner) Linha 157 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog () Linha 166 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click (remetente do objeto, System.Windows.RoutedEventArgs e) Linha 56 C #

ou:

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#

ou:

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

() Desconhecido
ntdll.dll! RtlpDereferenceAtom () Desconhecido
ntdll.dll! RtlDeleteAtomFromAtomTable () Desconhecido
kernel32.dll! InternalDeleteAtom
() Desconhecido
dui70.dll! DirectUI :: Value :: _ ZeroRelease () Desconhecido
dui70.dll! DirectUI :: DUIXmlParser :: _ DestroyTables (void) Desconhecido
dui70.dll! DirectUI :: DUIXmlParser :: ~ DUIXmlParser () Desconhecido
dui70.dll! DirectUI :: DUIXmlParser :: `vector deleting destructor '() Desconhecido
dui70.dll! DirectUI :: AccHDelete(classe DirectUI :: RefcountBase *) Desconhecido
shell32.dll! _DUI_ShellStyleSheet_UninitThreadIfPossible (void) Desconhecido
shell32.dll! DUI_ShellStyleSheet_UninitThread (void) Desconhecido
shell32.dll! CDUIViewFrame :: DestroyFrameWindow (void) Desconhecido
shell32.dll! CExplorerBrowser :: _ CleanupFrame (void) Desconhecido
shell32.dll! CExplorerBrowser :: Destroy () Desconhecido
comdlg32.dll! CFileOpenSave :: _ OnDestroyDialog () Desconhecido
comdlg32.dll! CFileOpenSave :: s_OpenSaveDlgProc () Desconhecido
user32.dll! UserCallDlgProcCheckWow () Desconhecido
user32.dll! DefDlgProcWorker () Desconhecido
user32.dll! DefDlgProcW
() Desconhecido
user32.dll! UserCallWinProcCheckWow () Desconhecido
user32.dll! DispatchClientMessage () Desconhecido
user32.dll! __ fnDWORD
() Desconhecido
ntdll.dll! KiUserCallbackDispatcherContinue
() Desconhecido
win32u.dll! NtUserDestroyWindow
() Desconhecido
user32.dll! DialogBox2 () Desconhecido
user32.dll! InternalDialogBox () Desconhecido
user32.dll! DialogBoxIndirectParamAorW
() Desconhecido
user32.dll! DialogBoxIndirectParamW
() Desconhecido
comdlg32.dll! CFileOpenSave :: Show () Desconhecido
[Transição Gerenciado para Nativo]
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog (System.IntPtr owner) Linha 171 C #
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog (System.Windows.Window owner) Linha 157 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog () Linha 166 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click (remetente do objeto, System.Windows.RoutedEventArgs e) Linha 56 C #

Esta página foi útil?
0 / 5 - 0 avaliações