永发信息网

C# Threading.Timer 为什么过了一会儿自己停了

答案:2  悬赏:10  手机版
解决时间 2021-04-03 02:39
C# Threading.Timer 为什么过了一会儿自己停了
最佳答案
上午回答过你的一个问题,这次看到你还在研究多线程的问题,就这个问题说一下我的理解吧。
可能原因:自定义方法Threading()是在UI主线程空闲上执行,而timer_Elapsed是在线程池当中的一个线程上执行,两者执行时很可能在执行 void timer_Elapsed(object sender)
{
t = new Thread(new ThreadStart(Threadp)); //实例化线程
//线程池当中的线程执行到这里时,UI主线程执行Threading()的 t.Abort();//关闭线程
t.Start();//启动线程
}

解决:你将所有方法都用try括起来,捕获异常信息,你一看就明白了。

建议:你一秒刷新一次TextBox控件,为什么要建一个Thread呢?(这个是很消耗资源的),可以像下面这样写。同时还可以查看this.Invoke和this.BeginInvoke的区别。这个还可以使用BackgroundWorker来完成这个功能。
private void button1_Click(object sender, EventArgs e)
{
System.Threading.Timer timer1 = new System.Threading.Timer(new TimerCallback(timer_Elapsed), null, 0, 1000);

//将这个d定义字段,放到方法外部
setText d = new setText(Threading); //实例化一个委托

}

void timer_Elapsed(object sender)
{

this.Invoke(d); //在拥用此控件的基础窗体句柄的线程上执行指定的委托
}追问这只是一个测试软件,实际上我是要在Timer中执行数据库操作及IO操作,很多东西,所以实际当中,开启一个线程还会消耗资源吗?我的目的就是为了解决,Forms.Timer卡的问题,现在Threading.Timer,我发现出现执行60次左右就停止的现象,所以就有点不知道怎么回事了。我试试你的方法吧,感谢你。
全部回答
private void button1_Click(object sender, EventArgs e)
{
System.Threading.Timer timer1 = new System.Threading.Timer(new TimerCallback(timer_Elapsed), null, 0, 1000);
GC.KeepAlive(timer1);
}
timer被回收了,加这个GC.KeepAlive(timer1);我以前也遇到过,这么解决的追问非常感谢,我最后还是通过System.Threading.Timer timer1(全局),然后timer1 = new System.Threading.Timer(new TimerCallback(timer_Elapsed), null, 0, 1000);
这样就不会回收了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
一晚做了14次,男的没什么事吧?
为什么会有两个输入法?
哪里可以买到中柑所091无核沃柑苗多少起批价
近现代秋瑾的诗有哪些
女生运动衣服怎么穿搭 运动风女
求谭晶版九儿资源 不要ape的 要flac或者MP3的
一天一个平方3块钱,40平米多少钱?一个月多
小号和萨克斯的区别
农历9月初6是什么星座
甲醇怎么卖?
求助 楼梯踏步宽 250mm 高160mm 长1200mm 楼
怎么判断iphonese是台积电的cpu
现在常熟普通工资多少钱一个月?
开黑坑怎么能让鱼不上钩
魁用音序查字法查,应查大写字母几,用部首查字
推荐资讯
动漫美少女图片大全唯美下部露凹陷
托福考前极速答案是怎么购到的?
7层及以上住宅都要设无障碍电梯吗
湖北一级公路为什么这么少,就连武汉周围也少
啤酒两听是什么意思
我想对乱丢垃圾的人说
K字火车107和108挨着么
如果我在A银行申请了该行的信用卡,别家银行
有没有大神会用3D-MAX画这种图?最好图文回答
为什么每的成语
三相电中知道V1V2V3和A1A2A3怎么求功率
江苏高一苦么,要上高一了,高一比初三哭么?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?