c# - 自动属性获取和设置在回调方法c#中不起作用
问题描述
嗨,我只是想从静态自动属性中获取值,如下所示 -
这是我的课-
public class ShutdownService
{
private const int TimerInterval = 6000;
private static DateTime _midnightStartTime;
public static bool TimeForMidNightShutDown{get; set;}
public static void Start(){
_midnightStartTime = DateTime.Now.AddMinutes(4);
_timer = new Timer(StartTask, null, 0, TimerInterval);
}
public static void StartTask(object state){
if(DateTime.Now >= _midnightStartTime){
TimeForMidNightShutDown = true;
} else {
TimeForMidNightShutDown = false;
}
}
}
我在启动应用程序时调用了这个启动方法。如果我在 上放置一个调试点if(DateTime.Now >= _midnightStartTime)
,它会将TimeForMidNightShutDown
属性值设为 true。但是当我从其他类调用这个属性时ShutdownService.TimeForMidNightShutDown
,它总是返回我为假。我不确定我在这里错过了什么。你能指导一下吗?
解决方案
我不完全知道为什么静态的东西不起作用。因此,我不想提供错误的线索,而是想给你一个不使用静态的工作示例,这可能会导致你的问题:
public class ShutdownService
{
private const int TimerInterval = 6000;
private DateTime _midnightStartTime;
private bool disposerFlag;
public bool TimeForMidNightShutDown{get; set;}
public void Start(){
_midnightStartTime = DateTime.Now.AddMinutes(1);
var _timer = new Timer(StartTask, null, 0, TimerInterval);
while (!disposerFlag)
{
}
_timer.Dispose();
}
public void StartTask(object state)
{
if(DateTime.Now >= _midnightStartTime)
{
TimeForMidNightShutDown = true;
Console.WriteLine("true");
disposerFlag = true;
}
else
{
TimeForMidNightShutDown = false;
Console.WriteLine("false");
}
}
}
此代码可以在 main 方法中的 Programm.cs 上执行
new ShutdownService().Start();
空的 while 循环非常重要,因为程序不会等待计时器完成其职责。我相信你也可以用一些异步方法或静态方法更优雅地解决它,但这是一个快速工作的模型。希望能帮助到你。我完全愿意在这里进行改进。
推荐阅读
- java - 您好,我在 Eclipse 中用于 Selenium 测试的代码有问题
- asp.net-core-3.1 - 如何从 Utils 类的 GetValue 方法传递 Ilogger 引用
- python - x轴为字符串时如何使python matplotlib显示x轴坐标(右上角)
- powershell - 如何从 ADFS 属性中删除双重条目
- google-chrome - 有没有办法调试 chrome 请求排队的原因?
- java - 在 RecyclerView 适配器中使用 ViewModel 的实时数据
- oracle - Oracle Apex 如何动态更改文本输入的字体
- php - 使用 Imagick php 获取图像的主色
- asp.net-core-mvc - 单独的类库中的 DBcontext 类和 Asp.net 核心 webapi 应用程序是一个单独的项目
- apache - 从 Windows 上的 Apache Web 服务器连接到 Azure AD