Winforms 在表单之间平滑过渡

Winforms 在表单之间平滑过渡,winforms,Winforms,我有两个表单,希望在每个表单中单击按钮时在它们之间来回切换。这可以通过打开新表单并关闭当前表单来完成。然而,根据经验,如果新的一个需要时间来充分显示,可能会有一个空白,没有显示形式。我正在尝试使用表单。显示的事件可避免此问题: private void button1_Click(object sender, EventArgs e) { var form2 = new Form2(); var shown = new AutoResetEvent(false); for

我有两个表单,希望在每个表单中单击按钮时在它们之间来回切换。这可以通过打开新表单并关闭当前表单来完成。然而,根据经验,如果新的一个需要时间来充分显示,可能会有一个空白,没有显示形式。我正在尝试使用表单。显示的事件可避免此问题:

private void button1_Click(object sender, EventArgs e)
{
    var form2 = new Form2();
    var shown = new AutoResetEvent(false);
    form2.Shown += (ta, tb) => { shown.Set(); };
    form2.Show();
    shown.WaitOne();
    Close();
}

但是,它会在WaitOne语句上死锁。在click方法完成之前,似乎不会引发显示的事件。我还能怎么做呢?

这一切都发生在同一个线程上-显示的
事件将被发布,并将在您的
按钮1\u单击(…)
方法完成后进行处理-这从未发生过。您可以尝试
form2.show+=(ta,tb)=>{this.Close();}取而代之(并删除
WaitOne
和另一个
Close
),但我还没有尝试过,所以不能保证我之前已经尝试过了。它简要地展示了新形式,然后是旧形式,最后是新形式。如果我可以隐藏新表单,直到抛出显示的表单,这就足够了。在
新表单2()之后和在
form2.Show()之前我已将不透明度设置为0,然后在显示的处理程序中将其设置回原来的值。这基本上是可行的,但有时在Show()期间,一些新控件会短暂出现,然后消失。