帅哥美女看过来!Button_Click事件中启动线程有问题!

Randy_Mic 2006-04-14 03:10:29
最简单的WinForm程序: Form上有一个ListBox和Button,在Click事件中启动一个线程:
private void button1_Click
{
t1 = new Thread(new ThreadStart(BackgroundProcess));
t1.Start();

Thread.Sleep(0);//看这里

for (int i = 0; i < 10; i ++)
{向ListBox中添加Item}

}
其中BackgroundProcess的代码也是向ListBox中添加Item.
问题:
按照MSDN的说法, 调用Thread.sleep(0)后,控制权应该转移到t1,但实际结果却是一直等到Button_Click函数完成后t1才获得执行?

为什么啊为什么?
泣血求助!!!
...全文
225 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Randy_Mic 2006-05-12
  • 打赏
  • 举报
回复
再来
Randy_Mic 2006-04-25
  • 打赏
  • 举报
回复
再up一把
jzyray 2006-04-18
  • 打赏
  • 举报
回复
改成这样试下:

//.....
t1.Start();

Application.DoEvents();

Thread.Sleep(0);
//......

感觉应该是t1还没有初始化完毕就被冻结了。
Randy_Mic 2006-04-18
  • 打赏
  • 举报
回复
小顶一把.
Randy_Mic 2006-04-15
  • 打赏
  • 举报
回复
to henry3695(), EverBluesoft(everblue) :
我显式的把Click事件的优先级调低: Thread.CurrentThread.Priority = ThreadPriority.Low

结果是一样的.
Randy_Mic 2006-04-15
  • 打赏
  • 举报
回复
to yy8866(猫咬狗) :
去掉了还是Click事件先执行完才执行线程代码.

to zlkingdom(风之悲伤) :
MSDN上有解释,设为0是有意义的.
zlkingdom 2006-04-14
  • 打赏
  • 举报
回复
不应该要Thread.Sleep(0);这一句吧,而且这一句的参数是微秒,设置为0一点意义都没有啊
yy8866 2006-04-14
  • 打赏
  • 举报
回复
Thread.Sleep(0);
跟 //Thread.Sleep(0); 有什么区别?

你把这个去掉,结果绝对对了。。。
EverBluesoft 2006-04-14
  • 打赏
  • 举报
回复
楼上的正解..

简单的理解下就是线程之见是交互的。.
我看你有戏 2006-04-14
  • 打赏
  • 举报
回复


要看优先级的吧,哪个线程抢CPU的能力强就那个线程执行效率就高
MyLf 2006-04-14
  • 打赏
  • 举报
回复
多线程的执行是不可预知的。

110,567

社区成员

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

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

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