たしかにダメだったわ

試してみたら

for(int i = 0; i < forms.Length; ++i)
{
 forms[i] = new Form();
 forms[i].Disposed += (sender, e)=>{ if(forms.All(form => form.Visible == false)){ Application.Exit(); } };
 forms[i].Show();
}

これでいけるみたいだな