Thread logtemp;
private void timer2_Tick(object sender, EventArgs e)
{
logtemp = new Thread(new ThreadStart(ReadLogTempFun));
logtemp.IsBackground = true;
logtemp.Start();
}
private void ReadLogTempFun()
{
//要执行的代码
}
我一步一步跟踪得到的结果,程序运行 ,执行定时器后,跑到ReadLogTempFun()执行,这个时候函数没执行完,仅仅是执行一小部分,又回到了定时器代码部分来执行,我把定时的时间改到很大,还是那样。如果不调试跟踪,从结果上来看是看把函数里面的代码区别执行完。这是怎么回事。希望知道的朋友说一下。谢谢了。
private void timer2_Tick(object sender, EventArgs e)
{
logtemp = new Thread(new ThreadStart(ReadLogTempFun));
logtemp.IsBackground = true;
logtemp.Start();
}
private void ReadLogTempFun()
{
//要执行的代码
}
我一步一步跟踪得到的结果,程序运行 ,执行定时器后,跑到ReadLogTempFun()执行,这个时候函数没执行完,仅仅是执行一小部分,又回到了定时器代码部分来执行,我把定时的时间改到很大,还是那样。如果不调试跟踪,从结果上来看是看把函数里面的代码区别执行完。这是怎么回事。希望知道的朋友说一下。谢谢了。
解决方案 »
- 给WPF中的LISTVIEW增加ITEM
- 谁有像网易163邮箱那样的网页编辑器
- csc编译器dos下不支持太长的整个项目编码如何解决?
- 怎样把word导成excel?
- 关于checkbox的问题,希望各位高手帮帮忙!
- OracleCommand 不能做数据操作?
- 请问如何将邮件头中的发件人,主题,日期……等信息提取出来啊?
- 如何在c#调用API: WaitForSingleObject. WaitForSingleObject是在Kernel32.dll中吗???
- 关于如何获取客户端的ID,IE版本及操作系统,集,集,集!
- 在线等,关于窗体隐藏的问题。
- label控件的显示问题
- 如何高效合并二进制文件?
(1)Thread.Start()方法运行后,ReadLogTempFun方法就进入了另外一个线程,而定时器是主线程中运行的,所以没等ReadLogTempFun运行完,定时器又开始运行了。
(2)不知道你的定时器是否用Timer的,Timer线程也是一个辅助线程,所以同样不在主线程中运行
(3)如果,你想把Thread中的代码运行完之后的话,思路是,将定时器的代码改到主线程中,然后,用Thread.Join()方法让ReadLogTempFun的方法完成后,才进行。希望对你有帮助。
你timer中的开启线程,代码已经执行完成了,所开启的线程跟timer没任何关系,这个时候你timer设置的时间到了,自然就进入到timer的代码里去了。
调试你用了10秒,而timer设置的是3秒,明显超过了timer的时间。
如果不调试跟踪,从结果上来看是看把函数里面的代码区别执行完。这是因为执行线程的时间很短,小于timer的间隔时间。如果线程里的代码很复杂,执行时间要很长,那就跟你现在调试一样的结果了。最好不要在timer或是线程中套线程。
所以每执行到这里来的时候就会调用那个方法。
根据这个道理可以感觉到 多线程调试的时候经常会两个线程不停地跳 实际上 只不过是兵分多路 每一路都在执行自己的事情
建议在需要的时候打断点 主用 F5 一个线程一个线程的调试 不要混着来 尽量少用 F10和F11
timer里判断线程状态,如果还在跑就直接返回.
顶一下
[/code]