繁体   English   中英

当用户移动窗口时,PushFrame会锁定WPF窗口

[英]PushFrame locks up WPF window when user is moving window

我正在使用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();

不幸的是,我没有为您提供解决方案,但只能确认我们可以在我们的应用程序中(以及在50行示例程序中)重现这一点。 随意投票支持这个连接问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM