.net Timer事件处理程序可以修改非静态变量

时间:2018-06-18 11:02:35

标签: c# .net

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非静态,这就是为什么这个问题。

1 个答案:

答案 0 :(得分:1)

你无法使用静态函数访问非静态实例字段,这是因为它不起作用。

如果要使用静态函数访问实例字段,则需要对象实例,然后可以访问该实例字段。 或者使字段静态,然后您可以访问字段

如果你做

static var someNonStaticVariable = 1000; // for example

它会起作用,但是你需要锁定该变量或Interlocked(如果你只想执行递增/递减或excahnge,即用于数字操作,则有用)。