我在自定义控件上设置了计时器,每隔15分钟刷新一次项目编号。我开始注意到Visual Studio会随机崩溃。好吧,无论如何,当时似乎是随机的。我开始查看事件日志,发现我控件上的计时器正在执行。由于连接/实体框架延迟加载问题导致VS崩溃,这引发了错误。
看到我正在使用下面的!this.DesignMode
,我还能做些什么来阻止其运行
这是我的timer_tick事件:
private void timer_Tick(object sender, EventArgs e)
{
if (!this.DesignMode) {
LoadProjectNumbers();
}
}
以下是事件日志中的异常文本:
Application: devenv.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.InvalidOperationException at
System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel()
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(System.Type)
at System.Data.Entity.Internal.Linq.InternalSet`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].get_InternalContext()
at System.Data.Entity.Infrastructure.DbQuery`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.OrderByDescending[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Linq.IQueryable`1<System.__Canon>, System.Linq.Expressions.Expression`1<System.Func`2<System.__Canon,Int32>>)
at ACGICore.Controls.ProjectNumberSearch.LoadProjectNumbers()
at ACGICore.Controls.ProjectNumberSearch.timer_Tick(System.Object, System.EventArgs)
at System.Windows.Forms.Timer.OnTick(System.EventArgs)
at System.Windows.Forms.Timer+TimerNativeWindow.WndProc(System.Windows.Forms.Message ByRef)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr, Int32, IntPtr, IntPtr)
答案 0 :(得分:0)
您可以为任务创建新的线程。 示例: -
创建包含的类的对象。 (如果你正在上课)
TestClass ObjTestClass = new TestClass();
然后创建一个新线程并在此线程中调用您的计时器功能。
线程screenthread =新线程(ObjTestClass.startTimer);
screenthread.Start();
在TestClass中编写startTimer函数。
public void startTimer()
{
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed + = new ElapsedEventHandler(timer_Tick);
aTimer.Interval = 900000;
aTimer.Enabled = true;
}
时间间隔15分钟= 900000