无法将自定义方法作为参数传递给 ElapsedEventHandler()
Unable to pass custom method to ElapsedEventHandler() as an argument
我正在开发一项 windows 服务,该服务将在特定文件夹中查找备份文件。当它找到一个时,服务将从该位置移动所有备份文件并将它们移动到存档文件夹。
我以前使用过 FileSystemWatcher
,但由于它在服务器上不起作用,所以我正在使用 DirectoryInfo
来查找文件。
要求 运行 此服务每隔 5 分钟检查一次传入的任何新备份文件。
我被计时器实现卡住了。
以下是我的代码:
我想从 ElapsedEventHandler 调用 MoveToProcessed(processed)
方法。但我收到错误 CS0149 - 预期方法名称.
protected override void OnStart(string[] args)
{
DirectoryInfo dir = new DirectoryInfo(backupdirectory);
// Other unrelated code omitted
// Move all the Backup files to Processed folder at certain intervals.
createOrderTimer = new System.Timers.Timer();
//***** ERROR ON THE FOLLOWING LINE *****
createOrderTimer.Elapsed += new ElapsedEventHandler(MoveToProcessed(processed));
//***************************************
createOrderTimer.Interval = 300000; // 15 min
createOrderTimer.Enabled = true;
createOrderTimer.AutoReset = true;
createOrderTimer.Start();
}
private void MoveToProcessed(string processed)
{
// Code here backs up and restores files
}
您可以轻松地从 事件处理程序调用方法,但事件处理程序方法本身必须匹配特定的签名。对于 System.Timers
class,它应该看起来像这样:
private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
因此您可以简单地创建一个具有此签名的方法,将其指定为事件处理程序,然后从那里调用您的方法:
// Elapsed event handler calls our other method
private static void CreateOrderTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// Not sure what the string argument represents, or how it should be set
MoveToProcessed("some string");
}
// We can assign the event handler above when creating the Timer:
protected override void OnStart(string[] args)
{
var createOrderTimer = new System.Timers.Timer
{
Interval = TimeSpan.FromMinutes(15).TotalMilliseconds,
AutoReset = true
};
createOrderTimer.Elapsed += CreateOrderTimer_Elapsed;
createOrderTimer.Start();
}
我正在开发一项 windows 服务,该服务将在特定文件夹中查找备份文件。当它找到一个时,服务将从该位置移动所有备份文件并将它们移动到存档文件夹。
我以前使用过 FileSystemWatcher
,但由于它在服务器上不起作用,所以我正在使用 DirectoryInfo
来查找文件。
要求 运行 此服务每隔 5 分钟检查一次传入的任何新备份文件。
我被计时器实现卡住了。
以下是我的代码:
我想从 ElapsedEventHandler 调用 MoveToProcessed(processed)
方法。但我收到错误 CS0149 - 预期方法名称.
protected override void OnStart(string[] args)
{
DirectoryInfo dir = new DirectoryInfo(backupdirectory);
// Other unrelated code omitted
// Move all the Backup files to Processed folder at certain intervals.
createOrderTimer = new System.Timers.Timer();
//***** ERROR ON THE FOLLOWING LINE *****
createOrderTimer.Elapsed += new ElapsedEventHandler(MoveToProcessed(processed));
//***************************************
createOrderTimer.Interval = 300000; // 15 min
createOrderTimer.Enabled = true;
createOrderTimer.AutoReset = true;
createOrderTimer.Start();
}
private void MoveToProcessed(string processed)
{
// Code here backs up and restores files
}
您可以轻松地从 事件处理程序调用方法,但事件处理程序方法本身必须匹配特定的签名。对于 System.Timers
class,它应该看起来像这样:
private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
因此您可以简单地创建一个具有此签名的方法,将其指定为事件处理程序,然后从那里调用您的方法:
// Elapsed event handler calls our other method
private static void CreateOrderTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// Not sure what the string argument represents, or how it should be set
MoveToProcessed("some string");
}
// We can assign the event handler above when creating the Timer:
protected override void OnStart(string[] args)
{
var createOrderTimer = new System.Timers.Timer
{
Interval = TimeSpan.FromMinutes(15).TotalMilliseconds,
AutoReset = true
};
createOrderTimer.Elapsed += CreateOrderTimer_Elapsed;
createOrderTimer.Start();
}