Thread sampleThread; private void DoInSeparateThread() { System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; ThreadStart myThreadDelegate = new ThreadStart(DoSomethingMehtod); sampleThread = new Thread(myThreadDelegate); sampleThread.IsBackground = true; sampleThread.SetApartmentState(ApartmentState.STA); sampleThread.Start(); } private void DoSomethingMehtod() { try { //Do Something sampleThread.Abort(); sampleThread.Join(); } catch (ThreadAbortException e) { Thread.ResetAbort(); } } private void button1_Click(object sender, EventArgs e) { DoInSeparateThread(); }