2

所以我有一个控件,它响应它的项目被更改,调用 UpdateLayout()。这会产生如下所示的堆栈跟踪:

说明:应用程序通过 System.Environment.FailFast(string message) 请求进程终止。消息:不可恢复的系统错误。堆栈:在 System.Environment.FailFast(System.String) 在 MS.Internal.Invariant.FailFast(System.String, System.String) 在 MS.Internal.Invariant.Assert(Boolean, System.String) 在 System.Windows。 Window.GetWindowMinMax() 在 System.Windows.Window.MeasureOverride(System.Windows.Size) 在 System.Windows.FrameworkElement.MeasureCore(System.Windows.Size) 在 System.Windows.UIElement.Measure(System.Windows.Size)在 System.Windows.ContextLayoutManager.UpdateLayout() 在 System.Windows.UIElement.UpdateLayout() 在

显然,在某些情况下,GetWindowMinMax() 会导致某种 Assert() 失败,这会导致调用 Environment.FailFast。在调用 UpdateLayout 之前我可以检查哪些条件以确保不会发生这些情况以避免遇到此错误?

4

2 回答 2

2

使用 Reflector 并查看GetWindowMinMax. 这是断言:

Invariant.Assert (!this.IsCompositionTargetInvalid, 
    "IsCompositionTargetInvalid is supposed to be false here") ;

因此,您的窗口似乎还没有真正创建为 Win32 窗口,或者它的 Win32 窗口已经被破坏。

于 2012-05-25T15:41:41.437 回答
2

我对此有一个一致的复制:

        hwndSource = new System.Windows.Interop.HwndSource(p);
        this.Visibility = System.Windows.Visibility.Hidden;
        hwndSource.RootVisual = this;

将 RootVisual 设置为隐藏窗口将触发 FailFast。

于 2013-03-22T18:47:44.497 回答