Hasta hoy no puedo leer mentes... (aún xD) .. seria bueno que coloques parte de tú código donde realizas el llamado de los hilos y también donde realizas el refresh.
Como normalmente lo hago (y hasta hoy no me ha fallado) es de la siguiente forma:
- Después de haber ejecutado el Hilo, al momento de refrescar como no sé si el hilo anterior ha terminado, ejecuto un delegado (para entrar al subproceso) con el Invoke() y así poder ejecutar el hilo.Abort(), ya que si deseas ejecutar el hilo.Abort() el programa marcará error de que quieres ejecutar un objeto que ya se está usando en otro proceso.
Bueno, realmente es una manera aunque yo supongo existen otras muchas formas de hacerlo..
Saludos espero te sirva.