1

我有一个 VS 2012 项目,它有一个每 2 分钟启动一个进程的计时器。它工作正常,但似乎在项目停止后继续运行。我所拥有的唯一迹象是它以计时器间隔将错误记录到数据库中。我需要明确停止计时器吗?当您按下停止按钮时,它是如何完成的?当我关闭项目时,记录停止。

滴答事件(RefreshBroadcast)静默失败(当应用程序未运行时),但日志记录工作正常,日志记录还表明它无权访问配置文件,因为它使用默认值(用于应用程序名称等)。日志记录代码也应该在视图中显示错误,所以最终 Visual Studio 会告诉我我的错误视图窗口“没有由...识别的资源”。这将在项目停止时发生,而我正在其他地方编码。在此之后,记录到数据库停止。

 Public Sub New()
        If Not System.Windows.Application.Current.MainWindow Is Nothing Then
            _refreshBroadcastTimer = New System.Windows.Threading.DispatcherTimer()
            AddHandler _refreshBroadcastTimer.Tick, AddressOf dispatcherTimer_Tick
            If Debugger.IsAttached Then
                _refreshBroadcastTimer.Interval = New TimeSpan(0, 0, 30)
            Else
                _refreshBroadcastTimer.Interval = New TimeSpan(0, 0, My.Settings.RefreshBroadcastIntervalMinutes * 60) ' change to seconds
            End If
            _refreshBroadcastTimer.Start()
        End If
    End Sub




Private Sub dispatcherTimer_Tick(sender As Object, e As EventArgs)
    Try
        RefreshBroadcast()
    Catch ex As Exception
        LogException(ex)
    End Try
End Sub
4

1 回答 1

0

有趣的是,问一个问题经常会给你答案,这一直困扰着我好几天,但我想我已经明白了。因为我在更新视图模型时启动了计时器,所以每当我在编辑器中打开视图时,它都会在后台创建视图模型的实例,这会启动计时器。我想我必须包装代码,这样它就不会在设计器中触发。

我已经将初始化代码包装在

 If Not System.ComponentModel.DesignerProperties.GetIsInDesignMode(New DependencyObject()) Then

到目前为止它似乎正在工作。

于 2012-12-05T16:05:36.867 回答