c# winform多线程会造成程序假死吗? 20

我.Net做了一个屏幕录像,用线程去调用截屏函数(th1=newThread(newThreadStart(fun.CaptureImg_curYes));)然后开启这个... 我.Net做了一个屏幕录像,用线程去调用截屏函数( th1 = new Thread(new ThreadStart(fun.CaptureImg_curYes));)然后开启这个线程。.CaptureImg_curYes这个函数里用了一个while(true)
用于重复执行,还添加了Thread.Sleep(60)!
还在程序运行时添加了 Thread.CurrentThread.IsBackground = true;
现在问题就是当我单击停止按钮时有时候会出现程序假死(停止按钮就是 th1.About();用来停止线程),就是什么都动不了。只有在VS中点击停止来结束程序。
我在截屏的函数里添加了Try Catch 在假死的时候没有任何的异常抛出。
运行程序10次可能有6到7次单击停止的时候会造成假死。
求打大神帮忙分析……
展开
 我来答
syht2000
高粉答主

2013-08-16 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
不要去about,你用一个比如boolean变量做标志,点停止时就设这个比如为true,然后在while中检测这个变量,比如
while(true)
{
if(flag) break;
//
}
追问
按照你们的说法,我没用About来终止线程,用一个Boole形变量来终止循环。但程序还是偶然出现假死。没有什么特别……
感谢帮忙分析……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
注册_帐号
2013-08-16 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:109万
展开全部
停止原因,是因为后台进程还没有退出,你点停止的时候,要停止进程。
调用下Abort()方法强制退出线程。不过这个方法不一定能立刻退出的。
建议添加标志变量,在线程中循环判断这个变量的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百百mp3
2013-08-17 · TA获得超过855个赞
知道小有建树答主
回答量:901
采纳率:90%
帮助的人:552万
展开全部
会不会是你还没有执行这个线程你就Abort了?
if (th1 != null) th1.Abort();
追问
放心低级的错误不会犯;况且,如果线程没有启用,你用about会有异常的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jqkalytrue
2013-08-16 · TA获得超过836个赞
知道小有建树答主
回答量:1509
采纳率:57%
帮助的人:382万
展开全部
循环不用用 while(true) 用 while(变量==1) 把变量声明为 全局 和 Volatile的 当你带你停止时 只需要把变量改为0即可, 用about 等于是强制线程抛出错误终止,但是你在线程里面调用了截图,系统不能强制截图函数即时抛出错误 所以就假死了
追问
按照你们的说法,我没用About来终止线程,用一个Boole形变量来终止循环。但程序还是偶然出现假死。没有什么特别……
感谢帮忙分析……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式