gpt4 book ai didi

c# - 如何使用HwndSource

转载 作者:太空狗 更新时间:2023-10-29 23:17:41 26 4
gpt4 key购买 nike

在我的 WPF 应用程序中,我必须让用户选择一个证书。我通过 X509Certificate2UI.SelectFromCollection 方法执行此操作。为了正确处理对话框,SelectFromCollection 方法需要父 Hwnd 的 IntPtr。我找到了以下代码来提供此功能:

HwndSource source = (HwndSource)HwndSource.FromVisual(Window.GetWindow(this));
var certificates= X509Certificate2UI.SelectFromCollection(...,source.Handle);

到目前为止,一切正常。我的问题是,因为我对 Win32 或互操作知之甚少,如果我必须在此之后做一些清理代码,或者像我上面那样使用 HwndSource 类是否有一些陷阱?

我已经看到 HwndSource 实现了 IDisposable,但在使用后处置该对象会关闭父窗口。因此这似乎不是预期的用途。

最佳答案

WPF窗口由两部分组成:

  • 由操作系统窗口组成的窗口区域
  • WPF 窗口内的非窗口区域

现在,作为 ContentControl 的 WPF 窗口将所有内容作为其内容。所以你可以说 Window 类中 Content 的每个像素都由 Outside 窗口保存。 WPF 的每个 Visual 都没有自己的与之关联的 HANDLE,而是外部窗口元素的内容。

有关详细信息,请参阅此 - http://www.abhisheksur.com/2010/12/win32-handle-hwnd-wpf-objects-note.html

因此,当您处理该句柄时,您实际上是在处理您的主窗口处理程序,这会导致整个应用程序的关闭。

因此,你在这里只是获取你的窗口处理程序,而不是创建任何你可能需要处理的东西..!!

关于c# - 如何使用HwndSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8082895/

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