No, no - it doesn't work like that.
You don't want to create a new instance of the current form and try to close it, you want to "close" the current instance, and show a new form. Unfortunately, that will probably kill you application as well.
So, your choices are:
1) Create a "master" form which is never shown, and which displays Form1 until teh job is doen, then closes it and shows teh second form.
2) Hide the current form, and close it when the second form shuts.
The second is easier to show you:
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
if (progressBar1.Value == 100)
{
Hide();
Form2 fm = new Form2();
fm.ShowDialog();
Close();
}
}