我在C#中有一个简单的应用程序,它从一个位置获取PDF并将其移动到另一个位置。
namespace MoveFiles
{
class Program
{
public static string destinationPath = @"S:\Re\C";
static void Main(string[] args)
{
//location of PDF files
string path = @"S:\Can\Save";
//get ONLY PDFs
string[] filePath = Directory.GetFiles(path, "*.pdf");
foreach (string file in filePath)
{
Console.WriteLine(file);
string dest = destinationPath + "\\" + Path.GetFileName(file);
File.Move(file, dest);
}
Console.ReadKey();
}
}
}
如果我运行这个应用程序它可以完成工作,但是,我需要每分钟执行一次这个代码。我可以使用task scheduler
每分钟运行应用程序,但遗憾的是最小运行时间为5分钟。
我尝试使用while(true)
,但它不起作用。如果我在应用程序运行时向文件夹添加更多PDF文件,则不会将其移动到其他文件夹。
我在网上发现了使用Timer
的建议,但我遇到了问题:
static void Main(string[] args)
{
Timer t = new Timer(60000); // 1 sec = 1000, 60 sec = 60000
t.AutoReset = true;
t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
t.Start();
}
private static void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// do stuff every minute
}
但是我遇到了编译器错误:
错误2参数1:无法从'int'转换为'System.Threading.TimerCallback'C:\ Win \ MoveFiles \ MoveFiles \ MoveFiles \ Program.cs 22 33 MoveFiles
有关如何解决此问题的任何建议?
答案 0 :(得分:0)
在这里查看构造函数:http://msdn.microsoft.com/en-us/library/system.threading.timer(v=vs.110).aspx
这是此构造函数的方法签名之一:
Timer(TimerCallback, Object, Int32, Int32)
您只能使用间隔来实例化System.Threading.Timer。要么改为使用System.Timers.Timer(http://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx),要么提供TimerCallback,Object状态(可以为null),到期时间和句点。请参阅此处:&{34;参数。"
下的http://msdn.microsoft.com/en-us/library/2x96zfy7(v=vs.110).aspx答案 1 :(得分:0)
private static Timer timer;
static void Main(string[] args)
{
timer = new Timer(timer_Elapsed);
timer.Change(60000, 60000);
Console.ReadKey();
}
private static void timer_Elapsed(object o)
{
// do stuff every minute
}
答案 2 :(得分:0)
解决方案比我想象的要容易。
这是我如何解决它。它可能不是最好的解决方案,但它可以满足我的需要。
我创建了一个while
循环并使用Thread.Sleep(60000)
强制该应用在再次执行之前进入休眠状态。
namespace MoveFiles
{
class Program
{
public static string destinationPath = @"S:\Re\C";
static void Main(string[] args)
{
//location of PDF files
while (true)
{
string path = @"S:\Can\Save";
//get ONLY PDFs
string[] filePath = Directory.GetFiles(path, "*.pdf");
foreach (string file in filePath)
{
Console.WriteLine(file);
string dest = destinationPath + "\\" + Path.GetFileName(file);
File.Move(file, dest);
}
Thread.Sleep(60000);
}
}
}
}