2015-12-14 151 views
2

我已经转换从C#中的进程创建守望到VB.Net时遇到转换的多数民众赞成给我的麻烦代码certian线路问题。C#到VB.Net转换,麻烦的RaiseEvent

这里是原来的C#代码:

using System; 
using System.ComponentModel; 
using System.Collections; 
using System.Globalization; 
using System.Management; 

namespace WMI.Win32 
{ 
    public delegate void ProcessEventHandler(Win32_Process proc); 
    public class ProcessWatcher : ManagementEventWatcher 
    { 
     // Process Events 
     public event ProcessEventHandler ProcessCreated; 
     public event ProcessEventHandler ProcessDeleted; 
     public event ProcessEventHandler ProcessModified; 

     // WMI WQL process query strings 
     static readonly string WMI_OPER_EVENT_QUERY = @"SELECT * FROM 
     __InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA'Win32_Process'"; 
     static readonly string WMI_OPER_EVENT_QUERY_WITH_PROC = 
     WMI_OPER_EVENT_QUERY + " and TargetInstance.Name = '{0}'"; 

    public ProcessWatcher() 
    { 
     Init(string.Empty); 
    } 
    public ProcessWatcher(string processName) 
    { 
     Init(processName); 
    } 
    private void Init(string processName) 
    { 
     this.Query.QueryLanguage = "WQL"; 
     if (string.IsNullOrEmpty(processName)) 
     { 
      this.Query.QueryString = WMI_OPER_EVENT_QUERY; 
     } 
     else 
     { 
      this.Query.QueryString = 
       string.Format(WMI_OPER_EVENT_QUERY_WITH_PROC, processName); 
     } 

     this.EventArrived += new EventArrivedEventHandler(watcher_EventArrived); 
    } 
    private void watcher_EventArrived(object sender, EventArrivedEventArgs e) 
    { 
     string eventType = e.NewEvent.ClassPath.ClassName; 
     Win32_Process proc = new 
      Win32_Process(e.NewEvent["TargetInstance"] as ManagementBaseObject); 

     switch (eventType) 
     { 
      case "__InstanceCreationEvent": 
       if (ProcessCreated != null) ProcessCreated(proc); break; 
      case "__InstanceDeletionEvent": 
       if (ProcessDeleted != null) ProcessDeleted(proc); break; 
      case "__InstanceModificationEvent": 
       if (ProcessModified != null) ProcessModified(proc); break; 
     } 
    } 
} 

// Auto-Generated running: mgmtclassgen Win32_Process /n root\cimv2 /o WMI.Win32 
// Renaming the class from Process to Win32_Process 
public class Win32_Process { ... } 
} 

而这里的VB.Net转换:

Imports System.ComponentModel 
Imports System.Collections 
Imports System.Globalization 
Imports System.Management 

Namespace WMI.Win32 
Public Delegate Sub ProcessEventHandler(proc As Win32_Process) 
Public Class ProcessWatcher 
    Inherits ManagementEventWatcher 
    ' Process Events 
    Public Event ProcessCreated As ProcessEventHandler 
    Public Event ProcessDeleted As ProcessEventHandler 
    Public Event ProcessModified As ProcessEventHandler 

    ' WMI WQL process query strings 
    Shared ReadOnly WMI_OPER_EVENT_QUERY As String = "SELECT * FROM " & vbCr & vbLf & "__InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'" 
    Shared ReadOnly WMI_OPER_EVENT_QUERY_WITH_PROC As String = WMI_OPER_EVENT_QUERY + " and TargetInstance.Name = '{0}'" 

    Public Sub New() 
     Init(String.Empty) 
    End Sub 
    Public Sub New(processName As String) 
     Init(processName) 
    End Sub 
    Private Sub Init(processName As String) 
     Me.Query.QueryLanguage = "WQL" 
     If String.IsNullOrEmpty(processName) Then 
      Me.Query.QueryString = WMI_OPER_EVENT_QUERY 
     Else 
      Me.Query.QueryString = String.Format(WMI_OPER_EVENT_QUERY_WITH_PROC, processName) 
     End If 

     Me.EventArrived += New EventArrivedEventHandler(AddressOf watcher_EventArrived) 
    End Sub 
    Private Sub watcher_EventArrived(sender As Object, e As EventArrivedEventArgs) 
     Dim eventType As String = e.NewEvent.ClassPath.ClassName 
     Dim proc As New Win32_Process(TryCast(e.NewEvent("TargetInstance"), ManagementBaseObject)) 

     Select Case eventType 
      Case "__InstanceCreationEvent" 
       RaiseEvent ProcessCreated(proc) 
       Exit Select 
      Case "__InstanceDeletionEvent" 
       RaiseEvent ProcessDeleted(proc) 
       Exit Select 
      Case "__InstanceModificationEvent" 
       RaiseEvent ProcessModified(proc) 
       Exit Select 
     End Select 
    End Sub 
End Class 


End Namespace 

我遇到这行代码的问题:

Me.EventArrived += New EventArrivedEventHandler(AddressOf watcher_EventArrived) 

我似乎无法弄清楚如何正确地转换它,我感谢任何帮助!

回答

5

这条线:

Me.EventArrived += New EventArrivedEventHandler(AddressOf watcher_EventArrived) 

应该是:

AddHandler Me.EventArrived , AddressOf Me.watcher_EventArrived