主线程从界面接收一个用户任务之后,交给工作线程去完成.但是完成这个任务需要很长一段时间,执行这个任务的过程中,弹出一个等待对话框,我在这个对话框中加入了一个"取消"按钮,我希望当用户点击取消时,能够中途停止任务的执行.
   怎么样才能真正取消这个尚未完成的任务呢?是直接强制关闭这个工作线程,还是另有其他好的办法?   我的工作线程的主要任务,是通过Web Service从服务器获取很大数量的数据,大量的时间,也就花在执行Web Service函数上了,强制关闭线程,会不会造成什么意想不到的结果呢?  还望大家多多指导!

解决方案 »

  1.   

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