gpt4 book ai didi

c# - 当用户移动窗口时 PushFrame 锁定 WPF 窗口

转载 作者:可可西里 更新时间:2023-11-01 08:26:24 24 4
gpt4 key购买 nike

我正在使用 PushFrame 来确保我的窗口在执行其他代码之前完成绘制。我的应用程序有一些时间敏感的功能,需要在我继续执行代码之前更新窗口。

所以我正在使用来自 msdn 的示例:http://msdn.microsoft.com/en-us/library/vstudio/system.windows.threading.dispatcher.pushframe(v=vs.110).aspx

效果很好,但如果用户在执行此代码时拖动我的窗口,则窗口会挂起,您只能使用 ctrl-alt-del 将其取回。

有什么想法吗?

最佳答案

应用程序似乎卡住了,因为在从用户代码调用 Dispatcher.PushFrame() 后,鼠标捕获不会从窗口调整大小或 DragMove() 操作中自动释放.

解决方法是在调用 Dispatcher.PushFrame() 之前从捕获鼠标的应用程序中的任何窗口手动释放鼠标捕获:

        ...
if (priority < DispatcherPriority.Loaded)
{
IntPtr capturingHandle = GetCapture();
for (int i = 0; i < Application.Current.Windows.Count; i++)
{
if (new WindowInteropHelper(
Application.Current.Windows[i]
).Handle == capturingHandle)
{
Mouse.Capture(
Application.Current.Windows[i],
CaptureMode.Element
);
Application.Current.Windows[i].ReleaseMouseCapture();
break;
}
}
}
...

此解决方法使用 GetCapture() p/invoke 声明:

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetCapture();

关于c# - 当用户移动窗口时 PushFrame 锁定 WPF 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19411613/

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