C#线程问题,不太明白请指点

zdczdccccc 2014-03-27 03:39:24
原本把Thread.Sleep(1000);放在位置1,调试时点button3其他按钮几乎就点不了,后来改到位置2调试通过,请问这两个地方有什么区别,为什么位置1会出现那种情况(具体位置,代码中已标出)

//功能是每天按时监控word内一个表格数据,如果在设定的时间点数据发生变化就将表格整体录入数据库
private void button3_Click(object sender, EventArgs e)
{
td = new Thread(delegate()
{
while (true)
{
this.Invoke((MethodInvoker)delegate()
{
if (listBox1.Items.Count > 0)//任务栏内有任务
{
foreach (object eachSetTime in listBox1.Items)
{
if (((Time)eachSetTime).needToExecute == true && ((Time)eachSetTime).hour.ToString() == DateTime.Now.Hour.ToString() &&
((Time)eachSetTime).minute.ToString() == DateTime.Now.Minute.ToString() &&
((Time)eachSetTime).second.ToString() == DateTime.Now.Second.ToString())
{
((Time)eachSetTime).needToExecute = false;//needToExecute表示是否需要执行任务,true表示需要,false表示已执行不需再执行
TrackWordAtSetTime();//跟踪word的方法
}
}
//每天到了零点将所有任务重置
if (DateTime.Now.Hour.ToString() == "0" &&
DateTime.Now.Minute.ToString() == "0" &&
DateTime.Now.Second.ToString() == "0")
{
foreach (object eachSetTime in listBox1.Items)
{
((Time)eachSetTime).needToExecute = true;
}
}
}
// Thread.Sleep(1000); 位置1
});
Thread.Sleep(1000); //位置2
}

});
td.IsBackground = true;
td.Start();


}
...全文
134 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdczdccccc 2014-03-27
  • 打赏
  • 举报
回复
引用 1 楼 hudsonhuang 的回复:
放到里面貌似会阻塞this吧 这种写法太恶心了。。。。 还不如用timer
学习中,所以希望用多点方式试一试 一针见血,明白了谢谢啦
hudsonhuang 2014-03-27
  • 打赏
  • 举报
回复
放到里面貌似会阻塞this吧 这种写法太恶心了。。。。 还不如用timer

110,547

社区成员

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

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

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