Stati c список, который будет сохранен между новыми экземплярами класса - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть служба VB. NET Windows, которая реализует таймер, который срабатывает каждую минуту. Этот таймер вызывает метод Execute. Этот метод создает экземпляр класса MyClass, а затем вызывает метод DoWork этого класса. В методе DoWork я проверяю, существует ли список myStaticList. Если список stati c не существует (не инициализирован: ничего), тогда я создаю список stati c и сохраняю некоторые параметры. Если список stati c существует, я читаю значения в нем, чтобы выполнить некоторую работу. Мне нужно, чтобы список myStaticList сохранялся между новым экземпляром MyClass. Как мне это сделать? Ниже приведен фрагмент кода.

Public Class MyService

    Protected Overrides Sub OnStart(ByVal args() As String)
         Dim serviceTimer As New Timer
         serviceTimer.Interval = 60000
         AddHandler serviceTimer.Elapsed, AddressOf OnTimedEvent
         serviceTimer.Enabled = True
    End Sub

    Private Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs)
         Dim serviceTimer As Timer = source
         Try
             serviceTimer.Stop()
             Me.Execute()
         Catch ex As Exception
             ' Do something...
         Finally
             serviceTimer.Start()
         End Try
    End Sub

    Private Sub Execute()
        Dim p As New MyClass()
        p.DoWork()
    End Sub

End Class

Public Class MyClass
    Static myStaticList As List(Of MyAnotherClass)

    Public Sub DoWork()
       ' Do the work
       If IsNothing(myStaticList) Then
          ' Create and do something with myStaticList, store values, etc.
       Else
          ' Do something with my existing myStaticList, read values and do something
       End If
    End Sub
End Class

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Один из вариантов - сохранить myStaticList в качестве члена MyService в качестве частного, не статичного c члена.

Потребуется переместить метод, который заполняет список to MyService. Это потребует создания экземпляра списка в MyService, и этот список будет по-прежнему доступен для изменений в MyClass.

Этот список затем может быть передан в экземпляр MyClass с помощью конструктора, который назначит список.

0 голосов
/ 21 февраля 2020

Другой вариант - сделать myStaticList не "Stati c", а "Shared":

Private Shared myStaticList As List(Of MyAnotherClass)

На самом деле его, вероятно, не следует называть myStaticList после, а скорее mySharedList;)

Список будет разделен между всеми экземплярами MyClass и останется без изменений после экземпляров MyClass d ie.

...