在我的WPF应用程序中,我必须让用户选择证书。我通过X509Certificate2UI.SelectFromCollection方法执行此操作。为了正确对话处理,SelectFromCollection方法需要父Hwnd的IntPtr。我找到了以下代码来提供这个:
HwndSource source = (HwndSource)HwndSource.FromVisual(Window.GetWindow(this));
var certificates= X509Certificate2UI.SelectFromCollection(...,source.Handle);
到目前为止,这个工作正常。我的问题是,因为我对Win32或互操作没有太大的了解,如果我必须在此之后做一些清理代码,或者如果我像上面那样使用HwndSource类有一些陷阱?
我已经看到HwndSource实现了IDisposable,但在使用后处理对象会关闭父窗口。因此,这似乎不是预期用途。
答案 0 :(得分:5)
WPF窗口由两部分组成:
现在,作为ContentControl的WPF窗口将所有内容都保存为其内容。因此,您可以说Window类中的Content的每个像素都由Outside窗口保存。 WPF的每个Visual都没有与之关联的HANDLE,而是外部窗口元素的内容。
有关详细信息,请参阅此内容 - http://www.abhisheksur.com/2010/12/win32-handle-hwnd-wpf-objects-note.html
因此,当您处理该句柄时,实际上是在处理主窗口处理程序,导致完全应用程序关闭。
因此,你只是在这里取得你的窗口处理程序,而不是创建你可能需要处理的任何东西.. !!