我想让计时器在每60秒运行一次method()的服务器上运行
现在我已经完成了-使用以下代码
public class Alarm
{
public Alarm(AppDbContext _db)
{
db = _db;
}
private static Timer aTimer;
private AppDbContext db;
public void StartTimerEvent()
{
// Create a timer and set a 60 second interval.
aTimer = new Timer();
aTimer.Interval = 60000;
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += (source, e) => CheckDBEvents(source, e);
// Have the timer fire repeated events (true is the default)
aTimer.AutoReset = true;
// Start the timer
aTimer.Enabled = true;
}
private void CheckDBEvents(Object source, ElapsedEventArgs e)
{
//get data from db with matching queries
List<Grocery> DataList = db.Grocery.Where(G => G.basic).Select(G => new Grocery
{
Id = G.Id,
Timeout = G.Timeout
}).ToList();
}
}
method()是CheckDBEvents(),它的作用是访问dbcontext实例,并寻找一些数据保存到本地常量变量Called DataList中。
问题:每次我尝试将上下文(Dbcontext)实例(在控制器或任何其他类中)传递给CheckDBEvents()方法时,都会处理该上下文-DbContext Disposed Exception。呼叫者,召集者
var t = new Alarm(db);
t.StartTimerEvent();
我的轮胎:-
使警报成为静态类:
现在,如果我能够做到这一点,那将是惊人的……但是无法在DbContext上进行操作,因为您无法在静态类中调用DbContext上的实例,因此您必须将其传递给调用它的人,这会导致相同的问题: db已处置且未通过
public static void StartTimerEvent(AppDbContext db)
{
.....
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += (source, e) => CheckDBEvents(source, e, db
//DbContext is Disposed here and
//don't get passed'
);
而且常量类和Dbcontext与我所阅读的内容相处得不太好。
长话短说 -我想保留的DbContext实例在另一个阶级,而不是控制器。没有被处置。
如果有人知道如何执行此操作或有服务器端计时器的源代码或类似的内容,请发表评论,我被困了2天
猛跑小猪
相关分类