我在尝试编一个可以根据用户设置的参数,定时备份文件的小程序。主要代码如下:
namespace copydelmove
{
public partial class mainform : Form
{
System.Timers.Timer myTimer = new System.Timers.Timer(); ...... private void start_btn_Click(object sender, EventArgs e)//启动按钮
{
myTimer.Interval = 1000;
myTimer.Enabled = true;
myTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
if(DateTime.Now == DateTime.Parse("2009/9/11 08:12:55"))
{
backupatonce();//条件达到,立即备份,backupatonce的代码经过测试,可以实现备份操作。
}
}
......
}但是在运行的时候,有时候可以运行,有时候不能运行。是不是timer不够精确造成的
namespace copydelmove
{
public partial class mainform : Form
{
System.Timers.Timer myTimer = new System.Timers.Timer(); ...... private void start_btn_Click(object sender, EventArgs e)//启动按钮
{
myTimer.Interval = 1000;
myTimer.Enabled = true;
myTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
if(DateTime.Now == DateTime.Parse("2009/9/11 08:12:55"))
{
backupatonce();//条件达到,立即备份,backupatonce的代码经过测试,可以实现备份操作。
}
}
......
}但是在运行的时候,有时候可以运行,有时候不能运行。是不是timer不够精确造成的
解决方案 »
- C#的webbrowser怎么才能获取301等重定向过程中的location网址
- 想改个udp文件传输帮我看可行不
- 请教c#中两个winform之间如何传值,比如左边一个treeview,右边一个listview.
- richTextBox1 选择文本问题
- 求救!!用控制台程序实现,每天执行一次。根据会员设定的条件,每天将经过筛选的信息发给会员,向单位推荐人才时,应该过滤掉曾经或正在
- Socket通讯问题,大哥大姐帮帮忙。
- 水晶报表怎莫打包
- Window 程序中 如何在DataTable前加1列
- 请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
- DATASET.WRITEXML问题
- c#往水晶报表中传值
- 生成dll文件问题
可能是需要备份的文件的问题。
if(DateTime.Now == DateTime.Parse("2009/9/11 08:12:55"))
这个条件判断中的DateTime.Now的精度大于"2009/9/11 08:12:55",实际中"2009/9/11 08:12:55"=="2009/9/11 08:12:55.000", 而DateTime.Now可能会是"2009/9/11 08:12:55.123"所以在timer触发事件的时候,这两个值并不相等。
试试下面的处理,也就是把DateTime.Now的毫秒去掉
DateTime tempDT = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
然后用tempDT比较DateTime.Parse("2009/9/11 08:12:55")
不能保证程序运行正好达到这个时间点。较好的做法可以判断当天的备份有没有做,备份的文件名称可以用时间来确定,程序直接判断当天的备份文件存不存在就好了。
你可以换用Threading.Timer