BackgroundWorker实现暂停操作
2008-12-24 20:19 3b阿当 阅读(1110) 评论(1) 收藏 举报当我们处理耗时操作时,为了避免单线程处理时界面的假死状态,我们往往选择将耗时操作放到后台线程里处理,后台线程处理完毕之后通知主线程执行成功。.net中的BackgroundWorker组件实现了后台线程操作的封装,使用起来非常便捷。具体使用的例子园子里有好几篇文章,感兴趣的朋友可以搜一下。今天我主要谈一下,如何在程序执行的过程中“暂停”后台线程的操作。大概的思路是设置一个标志,当用户请求暂停操作时,将该标志设成true,否则未false。然后在后台线程的操作中,在适当的位置检查该标志,如果为true,则暂停后台线程的操作。有一点需要说明的是,这里的“暂停”并不是调用Thread.CurrentThread.Suspend()或Monitor.Wait(object)实现的,这里采用了一种替代方案
由于原理非常简单,废话不多说,直接看代码:
这种解决方案其实在BackgroundWorker中已经被应用,当需要请求取消挂起的后台操作时,需要调用BackgroundWorker的CancelAsync()方法。但是,该方法仅仅是将BackgroundWorker的属性CancellationPending属性设为true。位于DoWork()事件中的代码必须在适当的位置检查CancellationPending属性,如果为true,则退出当前程序。基于这个思路,将BackgroundWorker简单的封装一下:
这样,当需要暂停后台线程时,直接调用SuspendAsync()方法,然后在适当的位置检查SuspensionPending属性,如果为true,则执行替代方案中的代码。
本人对多线程编程了解不多,这篇随笔仅仅作为一篇开发日志,以方便以后查阅。如果各位有什么更好的解决方案还请不吝赐教。




Thread.Sleep(
}
}
浙公网安备 33010602011771号