Похоже, что frmMain не имеет ссылки на оригинальный frmFlashIntro. Ваш бит кода
frmFlashIntro fi=new frmFlashIntro();
fi.Close();//checked with dispose also
фактически создаст второе frmFlashIntro, поэтому, когда вы вызываете fi.Close (), вы фактически закрываете вторую форму, а не оригинал.
Теоретически, вы должны иметь возможность добавить свойство к вашему frmMain, которое ссылается на frmFlashIntro, а затем вызвать Dispose для этого, что-то вроде
frmMain fm = new frmMain ();
this.FormfrmMainRef = fm;
fm.FormIntroRef = this;
FormfrmMainRef.Show ();
А затем в событие загрузки frmMain добавьте вызов FormIntroRef.close ()
Хорошо, но, кроме всего прочего, я думаю, что лучший способ решить эту проблему - обновить файл Program.cs и затем получить что-то вроде
frmFlashIntro flashIntro = new frmFlashIntro
frmFlashIntro.ShowDialog();
frmMain mainForm = new frmMain()
Application.Run(frmMain);
Да, и примечание второй стороны, как правило, типы начинаются с заглавных букв, а экземпляры этих типов начинаются со строчной буквы, а в верблюжьей. Так что обычно у вас есть что-то вроде
MainForm frmMain = new MainForm()
Это должно достичь желаемого результата.