2012-01-11 31 views
-1

在VB.NET中,我试图获取什么服务在TS使用下面的代码运行增加了终端服务器上运行服务时:空引用问题的字典

Imports System.ServiceProcess 
... 
Dim dictservice As Generic.Dictionary(Of String, Services) 

Public Sub GetService() 
    Dim localServices As ServiceController() = ServiceController.GetServices() 
    For Each service As ServiceController In localServices 
     dictservice.Add(service.DisplayName, New Services(service.DisplayName, service.ServiceName, service.Status.ToString)) 
    Next 
End Sub 

我的服务类如下:

Class Services 
    Private _displayName As String 
    Private _serviceName As String 
    Private _serviceStatus As String 

    Sub New(ByVal DisplayName As String, ByVal ServiceName As Object, ByVal ServiceStatus As String) 
     _displayName = DisplayName 
     _serviceName = ServiceName 
     _serviceStatus = ServiceStatus 
    End Sub 

    Public Overrides Function ToString() As String 
     Return _serviceStatus 
    End Function 
End Class 

当我似乎被填充字典 显示名称调试模式步:应用程序体验 服务名称:AElookUpSVC 服务状态:运行(4)

当它试图移动到下一个项目,我收到以下错误:

Null reference exception was unhandled: Object reference not set to an instance of an object.

我不能为我的生活工作在那里找到一个空引用?

+0

今后,请只编辑新的信息到您现有的问题中,不要再提出新的问题。谢谢。 – Kev 2012-01-11 23:33:31

+1

删除你的问题会让别人更难解释答案... – ForeverWintr 2013-02-05 22:58:16

回答

4

需要初始化你的字典,New

Dim dictservice As New Generic.Dictionary(Of String, Services) 

Public Sub GetService() 
    Dim localServices As ServiceController() = ServiceController.GetServices() 
    For Each service As ServiceController In localServices 
     dictservice.Add(service.DisplayName, New Services(service.DisplayName, service.ServiceName, service.Status.ToString)) 
    Next 
End Sub

现在它是Nothing,因此NullReferenceException

1

最有可能的问题似乎是dictServiceNothing,因此你得到一个NullReferenceException。你在哪里初始化/声明dictService,你确定初始化发生在这个方法之前?

如果这不是问题,您是否尝试过使用附加的调试器来运行此操作?它应该指向你失败的那条线。