C# 启动、停止、暂停并继续一个长时间运行的方法

C# 启动、停止、暂停并继续一个长时间运行的方法,c#,.net,multithreading,.net-4.0,task-parallel-library,C#,.net,Multithreading,.net 4.0,Task Parallel Library,我有一个运行时间很长的方法。我希望能够停止、暂停并继续执行该方法。我查看了,答案很好,但我希望使用更通用的库,如TPL。 TPL有一个取消机制,但我找不到暂停/继续功能 编辑 谢谢你的回答。但问题是我没有编写“长时间运行”的方法,我只是调用该方法。实现这一点最简单的方法是使用BackgroundWorker控件。它支持取消和进度报告 编辑 哦,我明白了。嗯,没有“干净”的方法来暂停和恢复您没有编写的方法,除非您想暂停线程。而且,如果该方法不是线程安全的,您可能会运气不佳 我想你已经回答了你自

我有一个运行时间很长的方法。我希望能够停止、暂停并继续执行该方法。我查看了,答案很好,但我希望使用更通用的库,如TPL。 TPL有一个取消机制,但我找不到暂停/继续功能

编辑


谢谢你的回答。但问题是我没有编写“长时间运行”的方法,我只是调用该方法。

实现这一点最简单的方法是使用BackgroundWorker控件。它支持取消和进度报告

编辑


哦,我明白了。嗯,没有“干净”的方法来暂停和恢复您没有编写的方法,除非您想暂停线程。而且,如果该方法不是线程安全的,您可能会运气不佳

我想你已经回答了你自己的问题。如果需要暂停/继续功能,则需要设置一些协议。对于您使用重置事件引用的问题,答案是正确的


如果您只需要取消您所说的任务并行库(TPL)与取消令牌的关系。

< P>如果它很长并且需要持久,您可能需要查看Windows工作流基金会。

为什么您需要停止它?您试图解决什么问题?用户必须能够按下按钮停止该操作的执行。您链接到的解决方案是我将如何处理它(并且打包得非常好)。TPL可以很容易地利用它。为什么不使用它?是否可以暂停/恢复BackgroundWorker?是的,请查看第二个链接。本质上,您可以向BackgroundWorker添加一个
Paused
属性(通过创建一个新类并从中继承)。然后,在DoWork事件中,您可以添加手动
while(暂停)线程调用任何可能暂停的地方。@SimpleCoder:我想你把wiki标记和标记弄混了。你能把你的帖子编辑得更具可读性吗?你真的不需要睡觉看@sehe:对不起,我不明白你的意思。什么部分出错了?谢谢你的回答,但这不是那种“长时间运行”,它只是做了很长的计算。暂停功能触发了我给这个选项。当暂停很长时间(谁知道多长时间…)时,保持进程的状态可能非常困难。一个简单的工作流程可以为您做到这一点。