C#线程问题,不太明白请指点
原本把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();
}
...全文
相关推荐
C#多线程解决界面卡死问题的完美解决方案
C#多线程解决界面卡死问题的完美解决方案
C#线程安全和跨线程问题
解决利用timer循环扫描导致的控件跨界问题,以及控件被多线程占用问题,本人资源全部免费,有需要的朋友直接下载吧
C#多线程不阻塞
这篇专题文章我解释异步方法调用和如何使用它们。 后玩委托、 线程和异步调用的这么久,这是一种罪恶不分享我的智慧和知识对这个问题的一些因此希望,你 won�t 找一个 MSDN 文章在 1 AM 不知道为什么在你决定去到计算机。 我会尝试使用婴儿步骤和大量的 examples�? 全面,我会包括如何异步调用方法、 如何将参数传递给这样的方法和如何找到一个方法完成执行时。 最后,我会显示命令模式中用于简化的一些代码。 与.NET 异步方法调用优点是方法的您可以在您的项目有任何方法,你可以称之为异步无接触你的代码。
C#停止线程的方法
主要介绍了C#停止线程的方法,实例分析了C#正确停止线程的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
C#线程详解,单线程,多线程,线程管理
C#线程详解,单线程,多线程,线程管理 C#线程详解,单线程,多线程,线程管理


