パネル p2 は、パネル 1 の幅が 0 になるまで表示されません。ただし、messageBox コードのコメントを外すと、messageBox が表示されたときに p2 がレンダリングされます。これにより、C# は、UI ペイントを強制する他のイベント (messageBox など) まで、p2 での再描画をネイティブに遅延させると考えられます。
どうすればこれを回避できますか?
private void SlidePanel(UIPanel p, UIPanel p2) //, Direction d)
{
int prevWidth = p.Width;
PanelDockStyle prevDock = p.DockStyle;
p.DockStyle = PanelDockStyle.Left;
p2.Show();
while (p.Width > 0)
{
p.Width -= (p.Width > 4 ? 4 : p.Width);
Thread.Sleep(1);
//if (p.Width < 400)
//{
// MessageBox.Show("Ha");
// break;
//}
}
p.Hide();
p.DockStyle = prevDock;
p.Width = prevWidth;
}