Simple:
public Form1()
{
int i;
InitializeComponent();
FormData FormData1 = new FormData();
Thread1 MyThread = new Thread1();
And
public class Thread1 : Form1
Because Thread1 is derived from Form1, when you construct a new Thread1 instance, the Form1 constructor is called, which creates a Thread1 instance, which calls it's own Form1 constructor, which creates as Thread1 instance, which calls ...
At some point the system runs out of stack memory to hold all it's return addresses and your app crashes.