C#定时器只执行一次。

publicvoidlongTimeUpdate(){TimershortT=newTimer(newTimerCallback(longUpdate),null,0,3... public void longTimeUpdate()
{
Timer shortT = new Timer(new TimerCallback(longUpdate), null, 0, 300);
}
///
/// 长周期更新
///
public void longUpdate(object state)
{
string str="lsdjf";
conn = db.ConnectDB();
FileStream fs=null;
if (!File.Exists("D:\\oa\\10.28\\log\\ceshi.text"))
{
fs = File.Create("D:\\oa\\10.28\\log\\ceshi.text");
}
else
{
fs = new FileStream("D:\\oa\\10.28\\log\\ceshi.text", FileMode.Append);
}
UTF8Encoding zh=new UTF8Encoding();
fs.Write(zh.GetBytes(str), 0, zh.GetByteCount(str));
//db.ExecuteNonQuery("update t_sys_users set dayonlinetime='0'",conn);
conn.Close();
}
按照我的意思应该是给文本不停的写字符串。但是程序执行后知写一次。这个timer那错了?
笨蛋程序员: 就是贴出来的这些。我昨天刚写好运行了好几次都没提示错误。
晚上有运行的时候就提示了未关闭的异常,真奇怪。 而且我给longUpdate设了断点跟踪运行可以不停循环输出字符串但是按了alt+f11跳出就不在输出字符串了。按理说那个timer是不停循环跳不出的这是怎么回事?求解!
展开
 我来答
笨蛋程序员
2010-11-04 · TA获得超过140个赞
知道答主
回答量:37
采纳率:0%
帮助的人:0
展开全部
我带着你的代码确实的跑过一次, 如果你的代码就是你贴出来的这些, 那应该是你的代码写错了 fs使用之后你应该添上close()函数的 fs.close(); 否则其实是在执行过程中会抛出异常的.
希望能帮上你的忙 :)
dkxpsg
2010-11-05 · TA获得超过1627个赞
知道小有建树答主
回答量:592
采纳率:0%
帮助的人:1042万
展开全部
你的代码会出一个报一个 文件“xxx”正由另一进程使用,因此该进程无法访问该文件。的错 这一点MSDN上已经说得很清楚了不要在Winform上使用System.Threading.Timer 你可以使用System.Windows.Forms.Timer或者使用一个线程

MSDN说明
System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行。System.Windows.Forms.Timer 是用于 Windows 窗体的更佳选择。要获取基于服务器的计时器功能,可以考虑使用 System.Timers.Timer,它可以引发事件并具有其他功能。

给你一个使用线程的代码吧
using System.Threading;
using System.IO;

public void longUpdate()
{
while (true)
{
using (FileStream fs = new FileStream("D:\\123.txt", FileMode.Append))
{
byte[] byteArr = Encoding.Default.GetBytes(DateTime.Now.Ticks.ToString() + "\r\n");
fs.Write(byteArr, 0, byteArr.Length);
}
Thread.Sleep(1000);
}
}
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(longUpdate));
thread.Start();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
优游自如
2010-11-04 · TA获得超过1012个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:184万
展开全部
Timer shortT = new Timer(new TimerCallback(longUpdate), null, 0, 300);
shortT.Start();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式