请高手帮忙分析,timer的Elapsed事件不执行 如果程序忙,则system.threading.timer计时器有可能停止工作。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有抛出异常,所有代码都在try-catch中,而且为了确定他有没有执行我在方法中添加了标记,每次执行该方法都先把标记符号写入文本,但是问题时段没有标记文字,其它时段正常 都放在try catch里都没捕捉到异常? 或许可以试试把代码放在Windows Service里然后部署看看会不会出错。 timer使用的也是线程池中的线程吧,会不会是这样的问题,线程池中的线程被占用完了,导致timer_elasped事件不能执行 只要在使用 Timer,就必须保留对它的引用。 对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。 即使 Timer 仍处在活动状态,也会被回收。是不是被回收了? 什么意思?怎样保留对它的引用?什么情况下才会失去对timer的引用? void timerScreen_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { try { //临时保存要写入文件的文本 string strText = string.Empty; lock (syn)//syn是个只读的object类型实例 { strText = sbData.ToString();//sbData是stringbulider类型实例,接受到得数据放入sbData sbData.Remove(0, sbData.Length); } if (strText.Length != 0) { if (XmlControl.ReadXML("savealldata") == "1") { //保存原始数据,每小时1个文件 File.AppendAllText(string.Format("{0}{1}.hero", Application.StartupPath + "\\DataPacket\\AllData\\", DateTime.Now.ToString("yyyy-MM-dd HH")), strText); } if (XmlControl.ReadXML("savetemp") == "1") { //保存原始数据到临时文件,供入库程序使用 File.AppendAllText(string.Format("{0}{1}.hero", Application.StartupPath + "\\DataPacket\\AllData\\temp\\", DateTime.Now.ToString("yyyy-MM-dd HH mm ss")), strText); } } lock (syn) { strText = controlData.ToString();//controlData是stringbulider类型实例,接受到得交互数据放入controlData controlData.Remove(0, controlData.Length); } if (strText.Length != 0) { if (XmlControl.ReadXML("savetemp") == "1") { File.AppendAllText(string.Format("{0}{1}.hero", Application.StartupPath + "\\DataPacket\\交互命令\\", DateTime.Now.ToString("yyyy-MM-dd HH mm ss")), strText); } } } catch (Exception ex) { log.Error(ex); } txtContent.Text = ""; log.Error("刷屏标记");//将“标记”写入日志用来检测事件是否执行 } 会不会是lock (syn)//syn是个只读的object类型实例 这地方有问题。直觉感应。供参考 当前上下文不存在名称utility 服务器信息传递 关于Winform的问题! 在datagridviewtextboxcolumn中添加控件 并且可以操控其位置 比如在右下角 请教了 新手,关于listView的问题 winform仿造浏览器,有几个问题大家帮忙看看 C#问题(急啊) 一对多中如何让相关联的子表外键等于主表的主键 新增access记录的问题(急啊) 请教高手 求解,没有办法,
void timerScreen_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
//临时保存要写入文件的文本
string strText = string.Empty;
lock (syn)//syn是个只读的object类型实例
{
strText = sbData.ToString();//sbData是stringbulider类型实例,接受到得数据放入sbData
sbData.Remove(0, sbData.Length);
} if (strText.Length != 0)
{
if (XmlControl.ReadXML("savealldata") == "1")
{
//保存原始数据,每小时1个文件
File.AppendAllText(string.Format("{0}{1}.hero", Application.StartupPath + "\\DataPacket\\AllData\\", DateTime.Now.ToString("yyyy-MM-dd HH")), strText);
}
if (XmlControl.ReadXML("savetemp") == "1")
{
//保存原始数据到临时文件,供入库程序使用
File.AppendAllText(string.Format("{0}{1}.hero", Application.StartupPath + "\\DataPacket\\AllData\\temp\\", DateTime.Now.ToString("yyyy-MM-dd HH mm ss")), strText);
} } lock (syn)
{
strText = controlData.ToString();//controlData是stringbulider类型实例,接受到得交互数据放入controlData
controlData.Remove(0, controlData.Length);
} if (strText.Length != 0)
{
if (XmlControl.ReadXML("savetemp") == "1")
{
File.AppendAllText(string.Format("{0}{1}.hero", Application.StartupPath + "\\DataPacket\\交互命令\\", DateTime.Now.ToString("yyyy-MM-dd HH mm ss")), strText);
}
}
}
catch (Exception ex)
{
log.Error(ex);
}
txtContent.Text = "";
log.Error("刷屏标记");//将“标记”写入日志用来检测事件是否执行
}
这地方有问题。直觉感应。供参考