調用API來判斷時間,然後刪除. using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential)] public struct SystemTime { public ushort wYear; public ushort wMonth; public ushort wDayOfWeek; public ushort wDay; public ushort wHour; public ushort wMinute; public ushort wSecond; public ushort wMiliseconds; } public class Win32 { [DllImport("Kernel32.dll")] public static extern bool SetSystemTime( ref SystemTime sysTime ); [DllImport("Kernel32.dll")] public static extern void GetSystemTime(ref SystemTime sysTime); } private void TestTime() { SystemTime time = new SystemTime(); Win32.GetSystemTime( ref time ); time.wMonth = 6; Win32.SetSystemTime( ref time ); } 上面就是調用時間的API用法,總貼出主要代碼,部分代碼省略。
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public struct SystemTime
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMiliseconds;
}
public class Win32
{
[DllImport("Kernel32.dll")]
public static extern bool SetSystemTime( ref SystemTime sysTime );
[DllImport("Kernel32.dll")]
public static extern void GetSystemTime(ref SystemTime sysTime);
}
private void TestTime()
{
SystemTime time = new SystemTime();
Win32.GetSystemTime( ref time );
time.wMonth = 6;
Win32.SetSystemTime( ref time );
}
上面就是調用時間的API用法,總貼出主要代碼,部分代碼省略。
onstart()
OnStop()
......
还是其他的什么方法中?就是要怎么样才能出发这个事件
onstart启动一个新线程。该线程计算当前至特定时间的时间差值,然后等待这个差值,随后执行相关操作。欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家看一看并提出宝贵建议。
{
Thread taskThread = new Thread(new ThreadStart(DoTask));
taskThread.Start();
}
private void DoTask()
{
DateTime taskTime = ReadTimeSettingFromSomeWhere();
Thread.Sleep(((TimeSpan)taskTime - DataTime.Now).TotalMilliseconds());
DeleteFiles();
}
private void ThreadFun()
{
DateTime dtNow = DateTime.Now;
DateTime dtSpecialTime = new DateTime( dtNow.Year, dtNow.Month, dtNow.Day, 12, 0, 0 );//Every day 12am
While( !blnStop )
{
dtNow = DateTime.Now;
if( dtSpecialTime < dtNow )
dtSpecialTime.AddDays( 1 );
Thread.Sleep( dtSpecialTime - dtNow );
//Delete files here
}
}
//onstart event
Thread thdSub = new Thread( new ThreadStart( ThreadFun ) );
thdSub.Start();
>While( !blnStop )
这里的blnStop怎么来的?没有定义吗还有dtSpecialTime.AddDays( 1 );这句话是不是不需要的!只要判断如果dtSpecialTime!= dtNow ,就Thread.Sleep( dtSpecialTime - dtNow );就好了
这里的blnStop怎么来的?没有定义吗这是关闭线程的标志,定义个全局的成员即可
例如:
private bool blnStop = false;to 还有dtSpecialTime.AddDays( 1 );这句话是不是不需要的!只要判断如果dtSpecialTime!= dtNow ,就Thread.Sleep( dtSpecialTime - dtNow );就好了当然有意义,首先需要等待的时间必须大于当前事件,这样Thread.Sleep才有意义。
这个话
private bool blnStop = false;
是要放在private void ThreadFun()中吗?还是其他地方
这一句
Thread.Sleep(((TimeSpan)taskTime - DataTime.Now).TotalMilliseconds());
好像调不通亚
这句话
Thread.Sleep( dtSpecialTime - dtNow );
不能运行!是什么问题
不能运行!是什么问题Change as follows:
Thread.Sleep( (TimeSpan)(dtSpecialTime - dtNow) );
我这样写有没有问题
当dtSpecialTime =dtNow 或者dtSpecialTime <dtNow 时报错private void ThreadFun()
{
DateTime dtNow = DateTime.Now;
DateTime dtSpecialTime = new DateTime( dtNow.Year, dtNow.Month, dtNow.Day, 16, 45, 0 );//Every day 12am
while(!blnStop)
{
dtNow = DateTime.Now;
if (dtSpecialTime < dtNow)
{
dtSpecialTime.AddDays(1); }
Thread.Sleep((TimeSpan)(dtSpecialTime - dtNow)); foreach (string strFileName in Directory.GetFiles(@"D:\lifengxin\WATABE\src\Export", "*.pdf"))
{ FileInfo fi = new FileInfo(strFileName);
DateTime TodayTime = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day);
if (fi.CreationTime.Date < TodayTime)
{
File.Delete(strFileName);
}
}
}
}
if (dtSpecialTime < dtNow)
{
dtSpecialTime.AddDays(1);}with
if (dtSpecialTime < dtNow)
{
dtSpecialTime = dtSpecialTime.AddDays(1);}
好像没有起作用。
我测试了一下
即使dtSpecialTime <dtNow
运行了dtSpecialTime.AddDays(1);
后,dtSpecialTime 得值仍然没有变