MyTimerクラスを構築したいが、パラメータとしてメソッド名を取得できません。それは "静的コンテキストでは非静的メソッド 'TimerCallBack'にアクセスできないと言いますが、メソッドが静的であるのはわかりますが、静的メソッドと非静的メソッドの両方でこのクラスを使用したいと思います。タイマーテストクラスのオブジェクトが、私はMyTimerに与えると、タイマーオブジェクトでは、このパラメータを使用しようとすると、それがどのように私はこの問題を解決することができます。動作していないのですか?メソッドとしてパラメータを使用する方法(TimerCallback)
class MyTimer
{
private System.Threading.Timer _timer;
private int _period;
private int _dueTime;
public MyTimer(TimerCallback timerCallBack, int period = System.Threading.Timeout.Infinite,
int dueTime = System.Threading.Timeout.Infinite, object _state = null)
{
this._period = period;
this._dueTime = dueTime;
_timer = new System.Threading.Timer(timerCallBack, _state, dueTime, period);
}
public void Start(int period = 0)
{
if (_timer != null)
{
if (period != 0)
{
_period = period;
}
_timer.Change(_dueTime, _period);
}
}
public void Stop()
{
_timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
}
public void Change(int dueTime, int period)
{
if (dueTime!= System.Threading.Timeout.Infinite)
{
_dueTime = dueTime;
}
if (period != System.Threading.Timeout.Infinite)
{
_period = period;
}
_timer.Change(_dueTime, _period);
}
public void Period(int period)
{
if (period >= 0)
{
_period = period;
}
}
public void DueTime(int dueTime)
{
if (dueTime >= 0)
{
_dueTime = dueTime;
}
}
public void Dispose()
{
_timer = null;
}
}
class test
{
private MyTimer _timer = new MyTimer(TimerCallBack, 1, 0, null);
void TimerCallBack(object state)
{
//Do something
}
}
TimerCallbackが何であるかを正確である - それは、オブジェクトを取ってデリゲートです空を返す。あなたの提案と元のポスターのコードとの間には実質的な違いはなく、インスタンスが存在する前にインスタンスメソッドを渡そうとしていた問題を解決することはできません。 – PMV
ああ、私は正しく読まなかった。 その場合、私は元のポスターが自分のアーキテクチャに疑問を抱いていると思います。非常に珍しいことをあなたが気づいたときに、しばしばより良い方法があります。後者はほとんどの時間が必要ではありません。 – Ravior