WPF应用程序卡在窗口调整大小上

我的团队使用.NET Framework 4.6.1开发WPF应用程序。 我们面临的问题是,如果用户在主线程忙于UI更新时调整应用程序窗口或子窗口的大小,则所有应用程序都将卡住/冻结,并且仅在执行了某些操作(如打开“任务管理器”)后才被释放。 我在不同的论坛上读到,由于WPF问题,当在UI控件中使用“ *”表示自动宽度/高度时,可能会发生此问题,因为在我们的应用程序中我们经常使用“ *”表示宽度/高度。 这个问题已知吗? 如果是,是否在最新的.NET Framework版本中进行了处理?

pengqy54 回答:WPF应用程序卡在窗口调整大小上

最可能的罪魁祸首是发生的GUI更改,该更改未在主GUI线程上表达。请注意,即使整数(如果未在gui线程上执行)也可能导致崩溃/异常,因此属性更改(很可能与INotifyPropertyChange绑定)。


如有疑问,请进入gui线程以进行所有视觉更改:

    /// <summary>
    /// Use this to safely perform an action which involves any of the properties of the VM.
    /// </summary>
    /// <param name="operation"></param>
    public static void SafeOperationToGuiThread(Action operation)
    {
        System.Windows.Application.Current?.Dispatcher?.Invoke(operation);
    }

用法

SafeOperationToGuiThread(() => { IsOperationOnGoing = true; HasLoginFailure = false; });     

否则,您将需要通过移除屏幕更改影响的所有控件/操作来征服。当应用程序没有崩溃时,请重新添加控件/操作,直到崩溃发生为止。

本文链接:https://www.f2er.com/3164142.html

大家都在问