gpt4 book ai didi

c# - 模态样式的 Ookii.Dialogs ProgressDialog 在完成后不会聚焦所有者窗口

转载 作者:可可西里 更新时间:2023-11-01 11:53:59 27 4
gpt4 key购买 nike

我正在使用 Ookii.Dialogs.Wpf.ProgressDialog(有关二进制文件和源代码,请参阅 http://www.ookii.org/software/dialogs/)来可视化某个过程。它是 BackgroundWorker 和对 Windows XP+ 集成 ProgressDialog 的 native API 调用的组合。我正在使用这样的对话框:

this.worker = new ProgressDialog {ShowTimeRemaining = true};
this.model.BackgroundWorker = this.worker;
this.worker.DoWork += (s, ev) => this.model.ExportAnalysis(saveFileName);
this.worker.ShowDialog(this);

任务完成后,模态对话框应重新聚焦所有者窗口(ShowDialog(this)this 是一个 WPF Window)。但它会聚焦当前打开的随机窗口。在检查 Ookii.Dialogs 代码后,我发现正在使用 native Windows API 调用 IOperationsProgressDialog::StartProgressDialog。 API 调用在 Ookii.Dialogs C# 源代码中像这样包装:

[PreserveSig]
void StartProgressDialog(
IntPtr hwndParent,
[MarshalAs(UnmanagedType.IUnknown)]
object punkEnableModless,
ProgressDialogFlags dwFlags,
IntPtr pvResevered
);

经过一些研究,我在这个网站上遇到了两个帖子:http://msdn.microsoft.com/en-us/library/windows/desktop/bb775262%28v=vs.85%29.aspx . Gideon7 提到了这一点:

[...] PROGDLG_MODAL should be considered broken and its use avoided. [...]

这篇 2008 年的帖子以及 2014 年的较新帖子中都说此功能已损坏。所以我的问题是:有没有人遇到过类似的问题并有机会解决它?还是我只是错误地使用了对话框?有没有人建议我如何解决这个问题,因为 Microsoft 显然还没有解决任何问题。

最佳答案

您应该能够在 ShowDialog(this) 调用后强制窗口恢复事件状态。

this.worker.ShowDialog(this);
this.Activate();

http://msdn.microsoft.com/en-us/library/system.windows.window.activate(v=vs.110).aspx

关于c# - 模态样式的 Ookii.Dialogs ProgressDialog 在完成后不会聚焦所有者窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21920645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com