1

2分ごとにプロセスを開始するタイマーを備えたVS2012プロジェクトがあります。正常に動作しますが、プロジェクトが停止した後も実行を継続しているようです。私が持っているこれの唯一の兆候は、タイマー間隔でデータベースにエラーを記録しているということです。タイマーを明示的に停止する必要がありますか?停止ボタンを押すと、それはどのように行われますか?プロジェクトを閉じると、ロギングが停止します。

ティックイベント(RefreshBroadcast)はサイレントに失敗します(アプリが実行されていない場合)が、ログは正常に機能します。また、ログは、デフォルト(アプリケーション名など)を使用するため、構成ファイルにアクセスできないことを示します。ロギングコードもビューにエラーを表示することになっているため、最終的に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
4

1 に答える 1

0

質問をすることがしばしばあなたに答えを与えるのはおかしいです、これは何日も私を悩ませてきました、しかし私はそれを理解したと思います。ビューモデルが新しくなったときにタイマーが開始するので、エディターでビューを開くと、バックグラウンドでビューモデルのインスタンスが作成され、タイマーが開始されます。デザイナーで起動しないように、コードをラップする必要があると思います。

initコードをラップしました

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

これまでのところ機能しているようです。

于 2012-12-05T16:05:36.867 に答える