C#线程暂停与继续

人生初见 2013-05-22 03:35:09
我有一个线程是向设备发送命令,当点击暂停的时候,就停止执行任务,然后再点击开始的时候继续执行线程里面的任务。点击停止的时候也是暂停线程任务的执行,点击开始的时候重新执行。
暂停的时候我该如何去停止线程,点击start的时候如何继续刚才暂停的任务?
停止的时候又该如何去停止线程的工作,以及按了start的时候如何开始?
...全文
8732 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
清茶&浊酒 2013-05-27
  • 打赏
  • 举报
回复
引用 10 楼 yuanzhouting 的回复:
[quote=引用 9 楼 lxp520llq 的回复:] [quote=引用 8 楼 yuanzhouting 的回复:] [quote=引用 2 楼 lxp520llq 的回复:] 去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么? for(int i = 0;i<commlist.count;i++) { autoEvent.waitone(); timeRun();//这里是执行进度条的那个 String[] commstr = commlist[i] as string[]; runcommand(commstr,i);//这里是发送命令的方法 thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间 } 我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么? 另执进度条的那个地方我也用了个timer。[/quote] 可能是惯性吧 说实话这个问题我也不知道什么原因 因为当时对我程序没多大妨碍 所以就没深研究了~~~~[/quote] o(︶︿︶)o 唉,我后来改用了thread.suspend和thread.resume了[/quote] 只要能实现想要的功能用什么方法无所谓
人生初见 2013-05-25
  • 打赏
  • 举报
回复
引用 9 楼 lxp520llq 的回复:
[quote=引用 8 楼 yuanzhouting 的回复:] [quote=引用 2 楼 lxp520llq 的回复:] 去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么? for(int i = 0;i<commlist.count;i++) { autoEvent.waitone(); timeRun();//这里是执行进度条的那个 String[] commstr = commlist[i] as string[]; runcommand(commstr,i);//这里是发送命令的方法 thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间 } 我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么? 另执进度条的那个地方我也用了个timer。[/quote] 可能是惯性吧 说实话这个问题我也不知道什么原因 因为当时对我程序没多大妨碍 所以就没深研究了~~~~[/quote] o(︶︿︶)o 唉,我后来改用了thread.suspend和thread.resume了
人生初见 2013-05-24
  • 打赏
  • 举报
回复
引用 4 楼 xian_wwq 的回复:
提供另外一种思路供参考。 不暂停或者回复线程,线程一直在运行,在线程中使用线程安全的变量作为开关。满足某种条件时,进行相关处理,不满足让线程sleep即可。在程序退出时再退出线程。
如果休眠的话,那怎么知道要休眠多久呢?
清茶&浊酒 2013-05-24
  • 打赏
  • 举报
回复
引用 8 楼 yuanzhouting 的回复:
[quote=引用 2 楼 lxp520llq 的回复:] 去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么? for(int i = 0;i<commlist.count;i++) { autoEvent.waitone(); timeRun();//这里是执行进度条的那个 String[] commstr = commlist[i] as string[]; runcommand(commstr,i);//这里是发送命令的方法 thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间 } 我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么? 另执进度条的那个地方我也用了个timer。[/quote] 可能是惯性吧 说实话这个问题我也不知道什么原因 因为当时对我程序没多大妨碍 所以就没深研究了~~~~
人生初见 2013-05-24
  • 打赏
  • 举报
回复
引用 2 楼 lxp520llq 的回复:
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么? for(int i = 0;i<commlist.count;i++) { autoEvent.waitone(); timeRun();//这里是执行进度条的那个 String[] commstr = commlist[i] as string[]; runcommand(commstr,i);//这里是发送命令的方法 thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间 } 我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么? 另执进度条的那个地方我也用了个timer。
游戏人间 2013-05-23
  • 打赏
  • 举报
回复
线程开始: thread.Start(); 线程挂起 thread.Suspend(); 线程继续 thread.Resume(); 线程终止 thread.Abort();
xian_wwq 2013-05-23
  • 打赏
  • 举报
回复
提供另外一种思路供参考。 不暂停或者回复线程,线程一直在运行,在线程中使用线程安全的变量作为开关。满足某种条件时,进行相关处理,不满足让线程sleep即可。在程序退出时再退出线程。
知擎物联 2013-05-23
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
参考http://www.360doc.com/content/11/0217/11/3705007_93741317.shtml
顺便借这个帖子请教下版主,如果我的线程中的处理不是随时可以暂停的,比如其中有连续几个与下位机的通讯操作,不能执行了2个操作,线程暂停下来。这样的情况如何处理? 我现在的线程是定义在一个类中的,我目前是另外在类里面定义了一个状态变量,再定义了一个暂停函数,在外部代码调用这个类的暂停函数时,则改变类里面的那个状态变量为暂停,而我上面说的连续几个操作之间是检查这个状态变量的,只有在都执行完成后,才检查这个状态变量,然后再暂停。 不知道还有没有更好的方法来处理这样的情况。如果我上面说的不详细,还请指出。
人生初见 2013-05-23
  • 打赏
  • 举报
回复
引用 2 楼 lxp520llq 的回复:
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我线程运行的时候有相应的进度条来显示进度如何,用的是progress.performstep的方法,但是感觉比自己预计的快,这个怎么修改呢?谢谢!
清茶&浊酒 2013-05-22
  • 打赏
  • 举报
回复
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧