可以用一只手来处理我的定时器包装类,那就太好了
本文关键字:包装类 定时器 我的 处理 一只 | 更新日期: 2023-09-27 18:04:46
我至少缩小了在这个问题上的错误,但现在我只是陷入了困境。我认为"它似乎应该起作用",我只是在对相同的帖子进行再融资。所以,我正在使用一个抽象基类,我想用它来控制数据下载过程。我为这个类添加了一个为System.Threading.Timer编写的包装器实例。在计时器的构造函数中,我有两个参数,一个是尝试将抽象方法传递给回调对象,另一个是计时器的tick事件的时间,基于不同数据下载进程的具体/派生类中的实例变量。
这是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;
using HtmlAgilityPack;
using DataUtlitiesMain;
using TradeSystemObjects;
using System.Data.SqlClient;
namespace DataOperations
{
public abstract class DataRunManager
{
DataRunTimer dataRunTimer;
private abstract String HourForDataRunInMilitary; //Such as 16.0 for 4pm.
public DataRunManager()
{
SetDataRunTimer();
}
private void SetDataRunTimer()
{
dataRunTimer = new DataRunTimer(MainDataRunProcedure(),GetMillisecondsUntilDataRun());
}
protected abstract static void MainDataRunProcedure(object state);
//public abstract TimerCallback SetDataRunMainDelegate();
private Int32 GetMillisecondsUntilDataRun()
{
DateTime now = DateTime.Now;
DateTime targetTime = DateTime.Today.AddHours(Convert.ToDouble(HourForDataRunInMilitary));
return (int)((targetTime - now).TotalMilliseconds);
}
}
public class DataRunTimer
{
Timer timer;
public DataRunTimer(TimerCallback TimerProc, Int32 MillisecondsUntilDataRun)
{
Timer timer = new Timer(TimerProc, null, MillisecondsUntilDataRun, 1000);
}
}
还有我的错误:
参数1:无法从"void"转换为"System.Threading.TimerCallback"DataOperations
方法"MainDataRunProcedure"的重载采用0个参数
与"DataOperations.DataRunTimer.DataRunTimer(System.Threading.TimerCallback,int("匹配的最佳重载方法具有一些无效参数
期待任何建议。谢谢
编译器错误非常不言自明:MainDataRunProcedure
返回void
,但您正试图使用其返回值来调用DataRunTimer
构造函数。
如果您试图传递方法本身(在本例中为MainDataRunProcedure(,则删除括号,即:
new DataRunTimer(MainDataRunProcedure, GetMillisecondsUntilDataRun());
省略括号会将该方法作为委托传递。如果你放上括号,那么你实际上是在试图调用方法(在这种情况下,没有参数(。
此外,abstract static
方法既非法又毫无意义。