c#Timer(System.Timers.Timer)用于定期触发Windows窗体应用程序中的事件。我想在even处理程序中调用函数(例如logger()函数)。 logger()不是静态方法。
分配给ElapsedEventHandler的函数是静态函数,因此无法调用非静态方法。 代码示例:
public partial class MainForm : Form {
//...
private MyClass myClass;
//...
}
private void SomeButton_Click(object sender, EventArgs e) {
//...
System.Timers.Timer t = new System.Timers.Timer(5000);
t.Elapsed += new ElapsedEventHandler(OnTimerElapsed);
t.Enabled = true;
//...
}
static void OnTimerElapsed(object sender, ElapsedEventArgs e) {
//...
// here call myClass.doSomething();
//...
}
如何才能正确完成此任务?我知道静态变量/方法不可能在OnTimerElapsed()中使用 - 这很清楚。我主要要求检查是否有另一种方法调用OnTimerElapsed(),可能是非静态方法或其他计时器类型或处理程序方法?或者,如果有办法将myClass的实例传递给OnTimerElapsed()
编辑:最好保持myClass非静态,这就是为什么这个问题。
答案 0 :(得分:1)
你无法使用静态函数访问非静态实例字段,这是因为它不起作用。
如果要使用静态函数访问实例字段,则需要对象实例,然后可以访问该实例字段。 或者使字段静态,然后您可以访问字段
如果你做
static var someNonStaticVariable = 1000; // for example
它会起作用,但是你需要锁定该变量或Interlocked(如果你只想执行递增/递减或excahnge,即用于数字操作,则有用)。