模式风格的Ookii.Dialogs ProgressDialog在完成后不会关注所有者窗口

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

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代码的一些检查后,我发现本地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 。 吉迪恩提到这个:

PROGDLG_MODAL应被视为中断,并避免使用。 […]

这篇文章从2008年开始,也是从2014年开始的新文章,它说这个function已经被打破了。 所以我的问题:有没有人遇到类似的问题,并有机会解决它? 还是我只是使用对话框错了? 有没有人build议如何解决这个问题,因为微软显然还没有解决任何问题。

ShowDialog(this)调用之后,您应该能够强制窗口返回激活状态。

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

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