项目停止时,Dispatcher Timer会触发

时间:2012-12-05 15:49:31

标签: .net wpf vb.net

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

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

 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

1 个答案:

答案 0 :(得分:0)

有趣的是如何提出一个问题经常给你答案,这已经困扰了我好几天,但我想我已经想到了。因为我在新建视图模型时启动了计时器,所以每当我在编辑器中打开View时,它会在后台创建一个视图模型的实例,这将从计时器开始。我想我必须包装代码,因此它不会在设计器中触发。

我已将init代码包装在

 If Not System.ComponentModel.DesignerProperties.GetIsInDesignMode(New DependencyObject()) Then
到目前为止似乎工作正常。