Question: I am showing a splash screen on a background thread while my program loads. Once it loads I am aborting the Thread as it's only purpose was to show a Now Loading splash form. 

My problem is that when aborting a Thread it throws a `ThreadAbortException` that the user can just click Continue on.

How do I deal with this? I was trying to suppress it like so -->

```
            try
        {
            Program.splashThread.Abort();
        }
        catch(Exception ex)
        {

        }

```

but I have a feeling that is going to get me yelled at here and it doesn't work any way.

Thanks!

Answer: 
You don't need to cancel the thread. I'll exemplify with code.

In the splash screen form:

```
public void CloseSplash()
{
    Invoke((MethodInvoker)delegate
    {
        this.Close();
    });
}

```

In the Program.cs file:

```
private static Splash _splash = null;
public static void CloseSplash()
{
    if (_splash!= null)
    {
        _splash.CloseSplash();
    }
}

```

Now, when your Main method starts, show the splash in a thread:

```
Thread t = new Thread(new ThreadStart(delegate
{
    _splash = new Splash();
    _splash.ShowDialog();
}));

t.Start();

```

...and when you want it to close, just close it:

```
Program.CloseSplash();

```

Then you don't need to worry about aborting the thread; it will exit gracefully.
Change the exception type to **ThreadAbortException** and add a call to **ResetAbort()**

```
    try
    {
        Program.splashThread.Abort();
    }
    catch(ThreadAbortException ex)
    {
        Thread.ResetAbort();
    }

```

In general, aborting threads is considered very bad practice and can lead to all sorts of hard to track down bugs. Have you considered figuring out a way to just **close the splash window** or use some sort of **polling** to stop the thread when a flag has been set?