==很奇怪的问题== 程序偶尔在 Thread.Start() 处卡住

halve 2008-10-15 12:06:46

Thread th = new Thread(new ThreadStart(_thManager.Run));
th.Start();

构造函数中的一段代码, 重复运行多次时, 偶尔一两次程序卡在 th.Start() 处, 不往下执行, 也不报错
在网上找了下, 没发现相关的讨论
这种问题感觉没处下手, 不知如何解决
请问有谁了解这种情况吗? 或者能指点下如何找出问题真正所在, 谢谢!
...全文
382 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
calvin_guo 2010-07-30
  • 打赏
  • 举报
回复
我出现同样的问题,也不知如何解决
halve 2008-11-04
  • 打赏
  • 举报
回复
这种情况可能确实很难 debug, 我再慢慢想办法吧, 帖子结掉
mjjzg 2008-10-16
  • 打赏
  • 举报
回复
new ThreadStart()里面应该只是一个方法名run什么的
halve 2008-10-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mjjzg 的回复:]
真的还不行,逐行或逐语句调试,慢慢检查
[/Quote]
通过写 log 的方法把问题定位到了 Thread.Start() 处, 然后我试着跟进 Start() 里面, 也没找到有用的信息...
halve 2008-10-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pkwen21 的回复:]
把线程定义成类范围的。然后对象关闭的时候把线程abort了。
在线程的执行函数里做一个try...catch...来处理abort异常时,结束线程。
[/Quote]
嗯, 是个不错的思路, 我试下
lude8880 2008-10-15
  • 打赏
  • 举报
回复
跟踪一下
mjjzg 2008-10-15
  • 打赏
  • 举报
回复
真的还不行,逐行或逐语句调试,慢慢检查
pkwen21 2008-10-15
  • 打赏
  • 举报
回复
把线程定义成类范围的。然后对象关闭的时候把线程abort了。
在线程的执行函数里做一个try...catch...来处理abort异常时,结束线程。
abcyzq 2008-10-15
  • 打赏
  • 举报
回复
pkwen21 2008-10-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 halve 的回复:]
线程是伴随一个 dialog 的构造函数起来的
每开一个 dialog, 都会对应一个新的线程, 不存在以前的线程没有结束的问题...
很奇怪, 也不知道问题会在哪 ;(
[/Quote]

不一定的,dialog的线程资源有可能没正确释放。我有试过关闭窗口的时候,如果没有主动的停止线程的话程序是不会正常退出的。
wartim 2008-10-15
  • 打赏
  • 举报
回复
代码太少看不出来
mjjzg 2008-10-15
  • 打赏
  • 举报
回复
Thread thread;
//ManualResetEvent MRE = new ManualResetEvent(true);
private void button1_Click(object sender, EventArgs e)
{
//显示时间
thread = new Thread(new ThreadStart(ShowTime));
thread.Start();
}
void ShowTime()
{
while (true)
{
// MRE.WaitOne();
label1.Text = DateTime.Now.ToString();
Thread.Sleep(1000);
}
}
简单点像这样
mjjzg 2008-10-15
  • 打赏
  • 举报
回复
看着没任何代码错误
你将th线程定义成全局
另外定义的委托
new ThreadStart(run)
的参数是一个无返回值的方法名
halve 2008-10-15
  • 打赏
  • 举报
回复
线程是伴随一个 dialog 的构造函数起来的
每开一个 dialog, 都会对应一个新的线程, 不存在以前的线程没有结束的问题...
很奇怪, 也不知道问题会在哪 ;(
pkwen21 2008-10-15
  • 打赏
  • 举报
回复
重复运行多次时,

是不是因为线程没有正确结束?
halve 2008-10-15
  • 打赏
  • 举报
回复
补充下, 卡住后, _thManager.Run() 没有执行起来
killer_liqiao 2008-10-15
  • 打赏
  • 举报
回复
up
wonflay 2008-10-15
  • 打赏
  • 举报
回复
逐行运行看下。
  • 打赏
  • 举报
回复
应该出在你那个run里面。
yilanwuyu123 2008-10-15
  • 打赏
  • 举报
回复
mark 有可能是考虑不够
加载更多回复(1)

110,500

社区成员

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

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

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