プログレスバーが完全に埋まるまで、10秒ごとにレイアウトを更新するタイマーを使用しています。
Windows 8.1 では問題ないようですが、Windows 10 では Layout Cycle Detected Exception がスローされます。
プログレスバーが完全に埋まるまで、10秒ごとにレイアウトを更新するタイマーを使用しています。
Windows 8.1 では問題ないようですが、Windows 10 では Layout Cycle Detected Exception がスローされます。
元のコードは
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 と ActualHorizontalOffSet が変化し続けたため、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;
}
マイクロソフトが来るまで