Ookii-dialogs-wpf: Hängen, es sei denn, unter Debugger ausgeführt

Erstellt am 25. Nov. 2019  ·  3Kommentare  ·  Quelle: ookii-dialogs/ookii-dialogs-wpf

Wenn ich versuche, VistaFolderBrowserDialog in meiner WPF .NET 4.6.1-Anwendung zu verwenden, bleibt die Anwendung hängen. Wenn ich es unter dem Debugger (im Debug- oder Release-Modus) ausführe, funktioniert es großartig.

Ich habe versucht, dies in der Beispielanwendung zu reproduzieren, indem ich verschiedene Aufrufe geändert und zum Nuget-Paket gewechselt habe, funktioniert immer noch einwandfrei.

Ich habe versucht, den Aufruf von VistaFolderBrowserDialog zu vereinfachen und den Beispielcode in meine Anwendung zu kopieren/einzufügen, hängt immer noch.

Haben Sie eine Idee, warum oder wie Sie das Problem aufspüren können?

need-more-info

Hilfreichster Kommentar

Vielen Dank, dass Sie sich schnell bei mir melden, @augustoproiete. Ich habe verschiedene Repro-Schritte ausprobiert, um die Dinge zu erkunden. Ich werde versuchen, meine anderen WPF-Anwendungen mehr zu verwenden, um zu sehen, ob es einen gemeinsamen Faktor gibt, der identifizieren könnte, warum es nicht funktioniert.

Ich habe mich eingeloggt und in meiner Anwendung reproduziert, der Hang ist bei int result = dialog.Show(owner); in private bool RunDialog(IntPtr owner)

Alle 3 Kommentare

Hey @matelich ich kann das von dir beschriebene

Im Anhang ist ein Beispielprojekt einer WPF-App, die .NET 4.6.1 verwendet, das VistaFolderBrowserDialog mit Ookii.Dialogs.Wpf v1.1.0 (_neueste zum Zeitpunkt dieses Schreibens_) öffnet und ich konnte Folgendes ausführen:

  • Debug _ohne_ den angehängten Debugger erstellen
  • Debug _mit_ dem angehängten Debugger erstellen
  • Release _ohne_ den angehängten Debugger erstellen
  • Release _mit_ dem angehängten Debugger erstellen

Es ist kein Hängenbleiben oder eine Ausnahme aufgetreten.

Wenn Sie mir eine Möglichkeit geben können, das Hängeverhalten zu reproduzieren, würde ich gerne weitere Nachforschungen anstellen.

Der entsprechende Code im beigefügten Beispiel:

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


Vielen Dank, dass Sie sich schnell bei mir melden, @augustoproiete. Ich habe verschiedene Repro-Schritte ausprobiert, um die Dinge zu erkunden. Ich werde versuchen, meine anderen WPF-Anwendungen mehr zu verwenden, um zu sehen, ob es einen gemeinsamen Faktor gibt, der identifizieren könnte, warum es nicht funktioniert.

Ich habe mich eingeloggt und in meiner Anwendung reproduziert, der Hang ist bei int result = dialog.Show(owner); in private bool RunDialog(IntPtr owner)

scheint verwandt zu sein:
Ich trete langsam auf, wenn der ausgewählte Pfad ein langer Netzwerkpfad ist .

Wenn ich Native code debugging aktiviere, sehe ich, dass die meiste Zeit irgendwo in diesem Aufrufstapel verbracht wird:

win32u.dll!NtUserMsgWaitForMultipleObjectsEx

() Unbekannt
user32.dll!RealMsgWaitForMultipleObjectsEx() Unbekannt
shell32.dll!SHProcessMessagesUntilEventsEx() Unbekannt
shell32.dll!CChangeRouterProxy::RegisterThread() Unbekannt
shell32.dll!SHChangeNotifyRegisterThread
() Unbekannt
comdlg32.dll!CFileOpenSave::Show() Unbekannt
[Übergang von verwaltet zu nativem]
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(System.IntPtr-Besitzer) Zeile 171 C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window Eigentümer) Zeile 157 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() Zeile 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click(object sender, System.Windows.RoutedEventArgs e) Zeile 56 C#

oder:

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#

oder:

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

() Unbekannt
ntdll.dll!RtlpDereferenceAtom() Unbekannt
ntdll.dll!RtlDeleteAtomFromAtomTable() Unbekannt
kernel32.dll!InternalDeleteAtom
() Unbekannt
dui70.dll!DirectUI::Value::_ZeroRelease() Unbekannt
dui70.dll!DirectUI::DUIXmlParser::_DestroyTables(void) Unbekannt
dui70.dll!DirectUI::DUIXmlParser::~DUIXmlParser() Unbekannt
dui70.dll!DirectUI::DUIXmlParser::`Vektor löscht Destruktor'() Unbekannt
dui70.dll!DirectUI::AccHDelete(Klasse DirectUI::RefcountBase *) Unbekannt
shell32.dll!_DUI_ShellStyleSheet_UninitThreadIfPossible(void) Unbekannt
shell32.dll!DUI_ShellStyleSheet_UninitThread(void) Unbekannt
shell32.dll!CDUIViewFrame::DestroyFrameWindow(void) Unbekannt
shell32.dll!CExplorerBrowser::_CleanupFrame(void) Unbekannt
shell32.dll!CExplorerBrowser::Destroy() Unbekannt
comdlg32.dll!CFileOpenSave::_OnDestroyDialog() Unbekannt
comdlg32.dll!CFileOpenSave::s_OpenSaveDlgProc() Unbekannt
user32.dll!UserCallDlgProcCheckWow() Unbekannt
user32.dll!DefDlgProcWorker() Unbekannt
user32.dll!DefDlgProcW
() Unbekannt
user32.dll!UserCallWinProcCheckWow() Unbekannt
user32.dll!DispatchClientMessage() Unbekannt
user32.dll!__fnDWORD
() Unbekannt
ntdll.dll!KiUserCallbackDispatcherWeiter
() Unbekannt
win32u.dll!NtUserDestroyWindow
() Unbekannt
user32.dll!DialogBox2() Unbekannt
user32.dll!InternalDialogBox() Unbekannt
user32.dll!DialogBoxIndirectParamAorW
() Unbekannt
user32.dll!DialogBoxIndirectParamW
() Unbekannt
comdlg32.dll!CFileOpenSave::Show() Unbekannt
[Übergang von verwaltet zu nativem]
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(System.IntPtr-Besitzer) Zeile 171 C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window Eigentümer) Zeile 157 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() Zeile 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click(object sender, System.Windows.RoutedEventArgs e) Zeile 56 C#

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen