Ookii-dialogs-wpf: Зависание, если не запускается под отладчиком

Созданный на 25 нояб. 2019  ·  3Комментарии  ·  Источник: ookii-dialogs/ookii-dialogs-wpf

Когда я пытаюсь использовать VistaFolderBrowserDialog в своем приложении WPF .NET 4.6.1, приложение зависает. Если я запускаю его под отладчиком (в режиме отладки или выпуска), он отлично работает.

Я попытался воспроизвести это в примере приложения, изменив различные вызовы и переключившись на пакет Nuget, все еще работает нормально.

Я попытался упростить то, как я вызываю VistaFolderBrowserDialog и копирую / вставляю образец кода в свое приложение, но все еще зависает.

Есть мысли относительно того, почему и как отследить проблему?

need-more-info

Самый полезный комментарий

Спасибо, что быстро связались со мной, @augustoproiete. Я пробовал различные шаги воспроизведения, чтобы исследовать вещи. Собираюсь попытаться добавить больше использования в другие мои приложения WPF, чтобы увидеть, есть ли какой-то общий фактор, который может определить, почему он не работает.

Я бросил вход в систему и воспроизвел в своем приложении, зависание находится на int result = dialog.Show(owner); в private bool RunDialog(IntPtr owner)

Все 3 Комментарий

Привет, @matelich, я не могу воспроизвести описанное вами поведение зависания.

Прилагается пример проекта приложения WPF с использованием .NET 4.6.1, который открывает VistaFolderBrowserDialog с помощью Ookii.Dialogs.Wpf v1.1.0 (_latest на момент написания_), и мне удалось запустить:

  • Debug build _без подключенного отладчика
  • Debug build _с_ присоединенным отладчиком
  • Release build _без подключенного отладчика
  • Release build _с_ присоединенным отладчиком

Никаких зависаний или исключений не произошло.

Если вы можете предоставить мне способ воспроизвести поведение зависания, я буду рад продолжить исследование.

Соответствующий код в прилагаемом образце:

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


Спасибо, что быстро связались со мной, @augustoproiete. Я пробовал различные шаги воспроизведения, чтобы исследовать вещи. Собираюсь попытаться добавить больше использования в другие мои приложения WPF, чтобы увидеть, есть ли какой-то общий фактор, который может определить, почему он не работает.

Я бросил вход в систему и воспроизвел в своем приложении, зависание находится на int result = dialog.Show(owner); в private bool RunDialog(IntPtr owner)

кажется связанным:
Я испытываю медленную работу, когда выбранный путь является длинным сетевым путем.

Если я включу Native code debugging , я вижу, что больше всего времени тратится где-то в этом стеке вызовов:

win32u.dll!NtUserMsgWaitForMultipleObjectsEx

() Неизвестный
user32.dll! RealMsgWaitForMultipleObjectsEx () Неизвестно
shell32.dll! SHProcessMessagesUntilEventsEx () Неизвестно
shell32.dll! CChangeRouterProxy :: RegisterThread () Неизвестно
shell32.dll! SHChangeNotifyRegisterThread
() Неизвестный
comdlg32.dll! CFileOpenSave :: Show () Неизвестно
[Успешный переход на собственный]
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog (владелец System.IntPtr) Строка 171 C #
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog (владелец System.Windows.Window) Строка 157 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog () Строка 166 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click (отправитель объекта, System.Windows.RoutedEventArgs e) Строка 56 C #

или:

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#

или:

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

() Неизвестный
ntdll.dll! RtlpDereferenceAtom () Неизвестно
ntdll.dll! RtlDeleteAtomFromAtomTable () Неизвестно
kernel32.dll! InternalDeleteAtom
() Неизвестный
dui70.dll! DirectUI :: Value :: _ ZeroRelease () Неизвестно
dui70.dll! DirectUI :: DUIXmlParser :: _ DestroyTables (void) Неизвестно
dui70.dll! DirectUI :: DUIXmlParser :: ~ DUIXmlParser () Неизвестно
dui70.dll! DirectUI :: DUIXmlParser :: `деструктор удаления вектора '() Неизвестно
dui70.dll! DirectUI :: AccHDelete(класс DirectUI :: RefcountBase *) Неизвестно
shell32.dll! _DUI_ShellStyleSheet_UninitThreadIfPossible (void) Неизвестно
shell32.dll! DUI_ShellStyleSheet_UninitThread (void) Неизвестно
shell32.dll! CDUIViewFrame :: DestroyFrameWindow (void) Неизвестно
shell32.dll! CExplorerBrowser :: _ CleanupFrame (void) Неизвестно
shell32.dll! CExplorerBrowser :: Destroy () Неизвестно
comdlg32.dll! CFileOpenSave :: _ OnDestroyDialog () Неизвестно
comdlg32.dll! CFileOpenSave :: s_OpenSaveDlgProc () Неизвестно
user32.dll! UserCallDlgProcCheckWow () Неизвестно
user32.dll! DefDlgProcWorker () Неизвестно
user32.dll! DefDlgProcW
() Неизвестный
user32.dll! UserCallWinProcCheckWow () Неизвестно
user32.dll! DispatchClientMessage () Неизвестно
user32.dll! __ fnDWORD
() Неизвестный
ntdll.dll! KiUserCallbackDispatcherContinue
() Неизвестный
win32u.dll! NtUserDestroyWindow
() Неизвестный
user32.dll! DialogBox2 () Неизвестно
user32.dll! InternalDialogBox () Неизвестно
user32.dll! DialogBoxIndirectParamAorW
() Неизвестный
user32.dll! DialogBoxIndirectParamW
() Неизвестный
comdlg32.dll! CFileOpenSave :: Show () Неизвестно
[Успешный переход на собственный]
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog (владелец System.IntPtr) Строка 171 C #
Ookii.Dialogs.Wpf.dll! Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog (владелец System.Windows.Window) Строка 157 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog () Строка 166 C #
Ookii.Dialogs.Wpf.Sample.exe! Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click (отправитель объекта, System.Windows.RoutedEventArgs e) Строка 56 C #

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

stricq picture stricq  ·  10Комментарии

soulflyman picture soulflyman  ·  9Комментарии

mgpreston picture mgpreston  ·  4Комментарии

vpenades picture vpenades  ·  4Комментарии

Insire picture Insire  ·  6Комментарии