2

プログレスバーが完全に埋まるまで、10秒ごとにレイアウトを更新するタイマーを使用しています。

Windows 8.1 では問題ないようですが、Windows 10 では Layout Cycle Detected Exception がスローされます。

4

1 に答える 1

2

元のコードは

private void SetVerticalOffSet()
        {
            Popup ParentPopup = this.Parent as Popup;

            if (ParentPopup == null)
                return;

            double ActualVerticalOffset = ParentPopup.VerticalOffset;
            double ActualHorizontalOffset = ParentPopup.HorizontalOffset;

            double NewVerticalOffset = (Window.Current.Bounds.Height - DecryptionDialog_MainGrid.ActualHeight) / 2;
            double NewHorizontalOffset = (Window.Current.Bounds.Width - DecryptionDialog_MainGrid.ActualWidth) / 2;
            if (ActualVerticalOffset != NewVerticalOffset || ActualHorizontalOffset != NewHorizontalOffset)
            {
                ParentPopup.VerticalOffset = NewVerticalOffset;
                ParentPopup.HorizontalOffset = NewHorizontalOffset;
            }
        }

レイアウトが更新されるたびに呼び出されました。

Windows 10 で ActualVerticalOffSet と ActualHorizo​​ntalOffSet が変化し続けたため、if ブロックが無限ループを引き起こしました。 (小数点以下 10 桁目)

if (ActualVerticalOffset != NewVerticalOffset || ActualHorizontalOffset != NewHorizontalOffset)
        {
            ParentPopup.VerticalOffset = NewVerticalOffset;
            ParentPopup.HorizontalOffset = NewHorizontalOffset;
        }

この修正に対する暫定的な解決策は次のとおりです。

if (Math.Round(ActualVerticalOffset) != Math.Round(NewVerticalOffset) ||     Math.Round(ActualHorizontalOffset) != Math.Round(NewHorizontalOffset))
{
        ParentPopup.VerticalOffset = NewVerticalOffset;
        ParentPopup.HorizontalOffset = NewHorizontalOffset;
}

マイクロソフトが来るまで

于 2016-04-21T11:06:43.697 に答える