我有一个 VB.NET Windows 服务,它实现了一个每分钟触发的计时器。 这个计时器调用一个方法,执行。 此方法创建类 MyClass 的实例,然后调用该类的方法 DoWork。 在 DoWork 方法中,我检查 myStaticList 列表是否存在。 如果静态列表不存在(未初始化:没有),那么我创建静态列表并存储一些参数。 如果静态列表存在,那么我会读取其上的值来做一些工作。 我需要在 MyClass 的新实例之间保留 myStaticList 列表。 我该怎么做? 在代码片段下方。

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

#1楼 票数:2 已采纳

一种选择是将myStaticList作为MyService的成员存储为私有的非静态成员。

它将需要将填充列表的方法移动到 MyService。 它将需要在MyService实例化列表,并且这些列表仍可用于MyClass更改。

然后可以通过构造函数将此列表传递给MyClass实例,该实例将分配一个列表。

#2楼 票数:0

另一种选择是使 myStaticList 不是“静态”而是“共享”:

Private Shared myStaticList As List(Of MyAnotherClass)

实际上它可能不应该被称为 myStaticList 之后而是 mySharedList ;)

该列表将在 MyClass 的所有实例之间共享,并在 MyClass 实例死亡后保留。

  ask by Ralph translate from so

未解决问题?本站智能推荐:

3回复

何时在类中初始化内联静态变量?

假设我们有一个类: GetOne方法引发异常......我们如何管理它? 将其重写为静态构造函数是一种很好的做法吗? 如果我们在内联_field声明中将它留在那里,GetOne方法何时会被执行?
5回复

我可以重置静态/共享类吗?

我有一个shared类(C#中的static ),它主要带有一些设置数据,应用程序中的任何类都可以读取并有时写入。 还有一些静态属性,它们包含一些内部状态。 现在我想将这个类恢复到它的初始阶段。 使用所有默认变量等。 假设用户想要重置当前状态并重新开始而不重新启动应用程序。 在单
2回复

禁止实例调用共享/静态方法?

是否可以禁止类的实例调用共享/静态方法? 例如: 我想允许这个: 但我要禁止这样做: 希望这样做的原因是,在这种情况下,实例可以调用该方法在语义上令人困惑。
2回复

C#中具有事件的共享(静态)类

这是我将在Visual Basic中执行的示例: Public Class Class1 Public Shared WithEvents Something As New EventClass Public Shared Sub DoStuff() Handles Some
2回复

VB.NET中的静态方法实现

我对VB.NET中的Static实现感到困惑。 在C#中,我们可以创建静态类和静态方法来为我们的应用程序编写实用程序方法。 现在,VB.NET让我们创建Module来代替静态类。 如果我们在模块中创建一个方法,默认情况下它会变为静态。 但在我的应用程序中,我编写了以下代码: Pub
4回复

复杂的共享/静态成员的最佳实践

我接管了ASP.NET应用程序,并在应用程序的多个类中找到了它。 程序员之前定义了几个共享/静态变量,它们在整个应用程序中充当“复杂枚举”。 作为一个相当新的程序员,这似乎不是最佳实践。 这是一个例子: 构造函数进行描述,然后使用存储过程(数据库为SQL Server)从数据库
2回复

为什么不能实例化静态类

按照目前的情况,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。 如果您认
3回复

每个实例的类级静态变量

我正在尝试执行以下操作: 我需要一个静态变量来从List控件中获取ListItemCollection(我可以执行此操作,但是如果我不将其设置为Shared,则它不会保留应有的值)。 事实是,此类是SharePoint Webpart,所以我很可能会多次使用该Webpart,并且我需要此