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是不停循环跳不出的这是怎么回事?求解! 展开
{
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是不停循环跳不出的这是怎么回事?求解! 展开
3个回答
展开全部
你的代码会出一个报一个 文件“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();
}
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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Timer shortT = new Timer(new TimerCallback(longUpdate), null, 0, 300);
shortT.Start();
shortT.Start();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询