计时器在设计模式下运行导致Visual Studio 2017崩溃

时间:2018-04-05 21:59:18

标签: c# .net winforms timer

我在自定义控件上设置了计时器,每隔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)

1 个答案:

答案 0 :(得分:0)

您可以为任务创建新的线程。 示例: -

  1. 创建包含的类的对象。 (如果你正在上课)

    TestClass ObjTestClass = new TestClass();

  2. 然后创建一个新线程并在此线程中调用您的计时器功能。

    线程screenthread =新线程(ObjTestClass.startTimer);
    screenthread.Start();

  3. 在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;
    }

  4. 时间间隔15分钟= 900000