怎么终止一个线程中尚未完成的任务

如何终止一个线程中尚未完成的任务?
主线程从界面接收一个用户任务之后,交给工作线程去完成.但是完成这个任务需要很长一段时间,执行这个任务的过程中,弹出一个等待对话框,我在这个对话框中加入了一个 "取消 "按钮,我希望当用户点击取消时,能够中途停止任务的执行.
      怎么样才能真正取消这个尚未完成的任务呢?是直接强制关闭这个工作线程,还是另有其他好的办法?

      我的工作线程的主要任务,是通过Web   Service从服务器获取很大数量的数据,大量的时间,也就花在执行Web   Service函数上了,强制关闭线程,会不会造成什么意想不到的结果呢?

    还望大家多多指导!

------解决方案--------------------
最好是让线程收到来自主程序的通知,然后自己结束。如果主程序强行结束确实有可能造成问题。
工作线程一般来说会有一个主循环,可以在这个主循环中循环判断某个Event是否被Signaled,如果是,则结束并退出。如果主循环中所作的事情比较长(或者没有循环),你还可以在代码中你觉得合适的地方插入对该Event的判断,如果Signaled则做一些清理工作然后退出。主程序点Cancel的时候把该Event设置为Signaled然后等待该线程结束即可。
------解决方案--------------------
强制关闭线程的话,可能有某些资源泄露。
用事件和消息通知都可以。楼上的方案就可以。

------解决方案--------------------
等待一个 事件,然后退出
------解决方案--------------------
先CancelIo,再中止线程