Ookii-dialogs-wpf: Suspendu à moins d'être exécuté sous le débogueur

Créé le 25 nov. 2019  ·  3Commentaires  ·  Source: ookii-dialogs/ookii-dialogs-wpf

Lorsque j'essaie d'utiliser VistaFolderBrowserDialog dans mon application WPF .NET 4.6.1, l'application se bloque. Si je l'exécute sous le débogueur (en mode Debug ou Release), cela fonctionne très bien.

J'ai essayé de reproduire cela dans l'exemple d'application en modifiant divers appels et en passant au package Nuget, cela fonctionne toujours bien.

J'ai essayé de simplifier la façon dont j'appelais le VistaFolderBrowserDialog et de copier/coller l'exemple de code dans mon application, toujours bloqué.

Avez-vous une idée de pourquoi ou comment traquer le problème ?

need-more-info

Commentaire le plus utile

Merci de me répondre rapidement, @augustoproiete. J'ai essayé diverses étapes de reproduction pour explorer les choses. Je vais essayer d'ajouter plus d'utilisation dans mes autres applications WPF pour voir s'il existe un facteur commun qui pourrait identifier pourquoi cela ne fonctionne pas.

J'ai lancé une connexion et reproduit dans mon application, le blocage est à int result = dialog.Show(owner); dans private bool RunDialog(IntPtr owner)

Tous les 3 commentaires

@matelich, je ne suis pas en mesure de reproduire le comportement de suspension que vous avez décrit.

Vous trouverez ci - VistaFolderBrowserDialog aide d' Ookii.Dialogs.Wpf v1.1.0 (_dernier au moment de la rédaction_) et j'ai pu exécuter un :

  • Debug construire _sans_ le débogueur attaché
  • Debug build _with_ le débogueur attaché
  • Release construire _sans_ le débogueur attaché
  • Release build _with_ le débogueur attaché

Aucune suspension ou exception ne s'est produite.

Si vous pouvez me fournir un moyen de reproduire le comportement de pendaison, je serais heureux d'approfondir mes recherches.

Le code pertinent dans l'exemple ci-joint :

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


Merci de me répondre rapidement, @augustoproiete. J'ai essayé diverses étapes de reproduction pour explorer les choses. Je vais essayer d'ajouter plus d'utilisation dans mes autres applications WPF pour voir s'il existe un facteur commun qui pourrait identifier pourquoi cela ne fonctionne pas.

J'ai lancé une connexion et reproduit dans mon application, le blocage est à int result = dialog.Show(owner); dans private bool RunDialog(IntPtr owner)

semble lié :
Je rencontre une lenteur lorsque le chemin sélectionné est un long chemin réseau .

Si j'active Native code debugging , je vois que le plus de temps est passé quelque part dans cette pile d'appels :

win32u.dll!NtUserMsgWaitForMultipleObjectsEx

() Inconnu
user32.dll!RealMsgWaitForMultipleObjectsEx() Inconnu
shell32.dll!SHProcessMessagesUntilEventsEx() Inconnu
shell32.dll!CChangeRouterProxy::RegisterThread() Inconnu
shell32.dll!SHChangeNotifyRegisterThread
() Inconnu
comdlg32.dll!CFileOpenSave::Show() Inconnu
[Géré vers la transition native]
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(System.IntPtr propriétaire) Ligne 171 C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window propriétaire) Ligne 157 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() Ligne 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click (expéditeur d'objet, System.Windows.RoutedEventArgs e) Ligne 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

() Inconnu
ntdll.dll!RtlpDereferenceAtom() Inconnu
ntdll.dll!RtlDeleteAtomFromAtomTable() Inconnu
kernel32.dll!InternalDeleteAtom
() Inconnu
dui70.dll!DirectUI::Value::_ZeroRelease() Inconnu
dui70.dll!DirectUI::DUIXmlParser::_DestroyTables(void) Inconnu
dui70.dll!DirectUI::DUIXmlParser::~DUIXmlParser() Inconnu
dui70.dll!DirectUI::DUIXmlParser::`vector suppression destructeur'() Inconnu
dui70.dll!DirectUI::AccHDelete(classe DirectUI::RefcountBase *) Inconnu
shell32.dll!_DUI_ShellStyleSheet_UninitThreadIfPossible(void) Inconnu
shell32.dll!DUI_ShellStyleSheet_UninitThread(void) Inconnu
shell32.dll!CDUIViewFrame::DestroyFrameWindow(void) Inconnu
shell32.dll!CExplorerBrowser::_CleanupFrame(void) Inconnu
shell32.dll!CExplorerBrowser::Destroy() Inconnu
comdlg32.dll!CFileOpenSave::_OnDestroyDialog() Inconnu
comdlg32.dll!CFileOpenSave::s_OpenSaveDlgProc() Inconnu
user32.dll!UserCallDlgProcCheckWow() Inconnu
user32.dll!DefDlgProcWorker() Inconnu
user32.dll!DefDlgProcW
() Inconnu
user32.dll!UserCallWinProcCheckWow() Inconnu
user32.dll!DispatchClientMessage() Inconnu
user32.dll!__fnDWORD
() Inconnu
ntdll.dll!KiUserCallbackDispatcherContinuer
() Inconnu
win32u.dll!NtUserDestroyWindow
() Inconnu
user32.dll!DialogBox2() Inconnu
user32.dll!InternalDialogBox() Inconnu
user32.dll!DialogBoxIndirectParamAorW
() Inconnu
user32.dll!DialogBoxIndirectParamW
() Inconnu
comdlg32.dll!CFileOpenSave::Show() Inconnu
[Géré vers la transition native]
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(System.IntPtr propriétaire) Ligne 171 C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window propriétaire) Ligne 157 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() Ligne 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click (expéditeur d'objet, System.Windows.RoutedEventArgs e) Ligne 56 C#

Cette page vous a été utile?
0 / 5 - 0 notes