I have an application which is taking ages to close. When I close the app, it tries to dispose a number of threads that do TCP scanning, WCF P2P attempts, and so on. The problem lies in a WCF thread that stalls on a method for about 17 seconds. 

```
IP2PAuthenticationService server;
ChannelFactory<IP2PAuthenticationService> channelFactory;
channelFactory = new ChannelFactory<IP2PAuthenticationService>(binding, endpointAddress);

server = channelFactory.CreateChannel();
string result = server.SendMyDetails(myContract, "foo");

```

So all this happens inside a thread. When the form closes it attempts to dispose the thread 

```
 if (prospectCrawlerThread != null)
 {
      prospectCrawlerThread.Abort();
      //prospectCrawlerThread.Join();
      prospectCrawlerThread = null;
  }

```

I've confirmed this by uncommenting the `.Join()`, and also by pausing the debug and seeing the threads that are still running. 

What's the best way to get rid of this thread? 

Edit: setting the thread to background seemed to make it quicker
`prospectCrawlerThread.IsBackground = true;`