我至少在这个问题上缩小了我的错误,但我现在只是陷入困境。我在那“似乎它应该工作”而且我只重新翻过相同的帖子。所以。我正在使用一个抽象基类,我想用它来控制数据下载过程。对于这个类,我添加了一个我为System.Threading.Timer编写的包装器实例。在我的计时器的构造函数中,我有两个参数,一个是尝试将抽象方法传递给Callback对象,另一个是计时器的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)'的最佳重载方法匹配有一些无效的参数
期待任何建议。感谢...
答案 0 :(得分:1)
编译器错误非常明显:MainDataRunProcedure
返回void
,但您尝试使用其返回值来调用DataRunTimer
构造函数。
如果你试图传递方法本身(在这种情况下为MainDataRunProcedure),则删除括号,即:
new DataRunTimer(MainDataRunProcedure, GetMillisecondsUntilDataRun());
省略括号将该方法作为委托传递。如果你加上括号,那么你实际上是在尝试调用方法(在这种情况下没有参数)。
此外,abstract static
方法既违法又毫无意义。