使用 TimerCallback 时在静态 class 中使用 'global' 变量的替代方法
Alternative to using 'global' variables in a static class when using a TimerCallback
我正在使用 TimerCallback 方法每 5 秒向屏幕显示一次统计信息,如下所示:
var timerCallback = new TimerCallback(_outputDisplayer.SetupThreading);
var stateTimer = new Timer(timerCallback, null, 0, 5000);
我有一个静态 class 保存我正在计算的统计变量。当计时器关闭时,调用 outputDisplayer class 中的方法并显示它们的值。
public static class Properties
{
public static decimal PercentOfChocolateIceCream { get; set; } = 0
public static decimal PercentOfRedCars { get; set; } = 0
}
由于我没有自己调用显示统计信息的方法,所以我一直在使用这个静态 class 中的字段。如果没有静态 class 和变量,有没有更好的方法来做到这一点?
改为使用实例 class,并将实例传递给计时器的构造函数。您的回调可以从传递给它的 state
参数中读取它。
public class Properties
{
public decimal PercentOfChocolateIceCream { get; set; } = 0
public decimal PercentOfRedCars { get; set; } = 0
}
var properties = new Properties();
var timerCallback = new TimerCallback(_outputDisplayer.SetupThreading);
var stateTimer = new Timer(timerCallback, properties, 0, 5000);
void SetupThreading(object? state)
{
var properties = (Properties)state;
//etc...
我正在使用 TimerCallback 方法每 5 秒向屏幕显示一次统计信息,如下所示:
var timerCallback = new TimerCallback(_outputDisplayer.SetupThreading);
var stateTimer = new Timer(timerCallback, null, 0, 5000);
我有一个静态 class 保存我正在计算的统计变量。当计时器关闭时,调用 outputDisplayer class 中的方法并显示它们的值。
public static class Properties
{
public static decimal PercentOfChocolateIceCream { get; set; } = 0
public static decimal PercentOfRedCars { get; set; } = 0
}
由于我没有自己调用显示统计信息的方法,所以我一直在使用这个静态 class 中的字段。如果没有静态 class 和变量,有没有更好的方法来做到这一点?
改为使用实例 class,并将实例传递给计时器的构造函数。您的回调可以从传递给它的 state
参数中读取它。
public class Properties
{
public decimal PercentOfChocolateIceCream { get; set; } = 0
public decimal PercentOfRedCars { get; set; } = 0
}
var properties = new Properties();
var timerCallback = new TimerCallback(_outputDisplayer.SetupThreading);
var stateTimer = new Timer(timerCallback, properties, 0, 5000);
void SetupThreading(object? state)
{
var properties = (Properties)state;
//etc...