2017-05-18 5 views
1

Visual Basicでフォームのないクラスがあり、それには5000msの間隔を持つタイマーが含まれています。クラスは何も設定しないとアクティブなままです。Visual Basic

問題は私がクラスをNothingに設定すると、クラスがまだアクティブで、タイマーがまだ動いているようです。

クラスを完全に処分し、その寿命を延ばす方法はありますか?

Public Class MyCustomClass 

    Public GlobalTimer As New System.Windows.Forms.Timer 

    Public Sub New() 

    GlobalTimer.Interval = 5000 
    GlobalTimer.Enabled = True 
    GlobalTimer.Start() 
    AddHandler GlobalTimer.Tick, AddressOf GlobalTimer_Tick 

    End Sub 

    Public Sub GlobalTimer_Tick(ByVal sender As Object, ByVal e As 
    EventArgs) 
    Console.WriteLine("Tick") 
    End Sub 

End Class 
+1

もでexmplainedとしてあなたが使用したコードを共有してください:[MCVE]とも読む[尋ねる] – Mederic

+0

しようと、あなたはそれがどのクラス教えてください。あなた自身のカスタムクラスですか?カスタムクラスの場合は、問題の解決策を評価するためにコードを参照する必要があります。 –

+0

こんにちは、それはカスタムクラスです、どうしてクラス自体を見る必要がありますか?理由のために、私はコードを共有することはできませんが、それはプログラマチックに作成されたタイマーを持つシンプルなカスタムクラスです。私はクラス変数をクラス自体の外にあるNothingに設定しています。 @DannyJames –

答えて

1

「クラスインスタンスをNothingに設定してもすべてがクリアされるわけではありません。 それで、ここに希望の動作を実現するMyCustomClassの更新版があります。クラスはIDisposableインターフェイスとDispose()メソッドを実装するようになりました。それはあなたがいずれかの代わりに何にそれを設定するのは、この方法のMyCustomClassオブジェクトを配置呼び出すかブロックを使用して以内にそのメソッドを使用する必要があります動作させるためには

Public Class MyCustomClass 
    Implements IDisposable 

    Public GlobalTimer As New System.Windows.Forms.Timer 

    Public Sub New()   
     GlobalTimer.Interval = 1000 
     GlobalTimer.Enabled = True 
     GlobalTimer.Start() 
     AddHandler GlobalTimer.Tick, AddressOf GlobalTimer_Tick 

    End Sub 

    Public Sub Dispose() Implements IDisposable.Dispose 
     GlobalTimer.Dispose() 
    End Sub 

    Public Sub GlobalTimer_Tick(ByVal sender As Object, ByVal e As EventArgs) 
     Console.WriteLine("Tick") 
    End Sub 
End Class 

dim cusClassObj as new MyCustomClass() 
    ' perform other tasks here 
cusClassObj.Dispose() 

OR

Using cusClassObj As New MyCustomClass() 
    ' perform other tasks here 
End Using 
関連する問題