Tutorial03 - Die Anzahl an COM Proxies innerhalb der Anwendung überwachen

In vielen Situation kann es nützlich für Sie sein zu wissen wieviele COM Proxies Ihre Anwendung derzeit vom COM Server(Office) bezieht. Grundsätzlich ist es ratsam die Anzahl COM Proxies immer so gering als möglich zu halten um den COM Server nicht unnötig zu belasten. NetOffice stellt Ihnen daher Möglichkeiten zur Verfügung die Anzahl der COM Proxies im Auge zu behalten. Die erste von 2 Möglichkeiten ist das ProxyCount Property.

Public ReadOnly Property NetOffice.Factory.ProxyCount() As Integer

Sie können dieses Property jederzeit abrufen um die Anzahl offener Proxies zu ermitteln.
Die zweite Möglichkeit ist das ProxyCountChanged Ereigniss.

Public Event NetOffice.Factory.ProxyCountChanged(ByVal proxyCount As Integer)

Sie können dieses Event abbonieren um sich bei einer Erhöhung oder Erniedrigung der Anzahl COM Proxies benachrichtigen zu lassen. Sie müssen jedoch beachten das der Aufruf des Ereignisses möglicherweise aus einem anderen Thread erfolgt. Dies geschieht immer dann wenn sich die Anzahl COM Proxies aufgrund eines Ereigniss Triggers(z.B. das WorkBookOpen Event) geändert hat. Sollten Sie das ProxyCountChanged Event abboniert haben und innerhalb ihres ProxyCountChanged Event Triggers schreibend auf Controls ihrer UI zugreifen, z.B: um die Azahl der Proxies anzuzeigen, müssen Sie in diesem Fall ein sogenanntes Invoke ausführen. Der folgende Beispielcode verdeutlicht die sichere Nutzung des ProxyCountChanged Ereignisses.

Listing 1.0

Public Class SampleForm
   
  Public Sub New()

        InitializeComponent()

        ' Das Event ProxyCountChangedEvent abbonieren 
        Dim changeHandler As Factory.ProxyCountChangedHandler _
        = AddressOf Me.ProxyCountChanged
        AddHandler Factory.ProxyCountChanged, changeHandler

    End Sub

    Private Sub ProxyCountChanged(ByVal proxyCount As Integer)

        If (labelProxyCount.InvokeRequired) Then
            ' wir benötigen ein Invoke da der Aufruf aus 
            ' einem anderen Thread erfolgt ist 
            labelProxyCount.Tag = proxyCount.ToString()
            Dim updateHandler As MethodInvoker = AddressOf Me.UpdateLabel
            labelProxyCount.Invoke(updateHandler)
        Else
            ' wir benötigen kein Invoke und können
            ' direkt auf unser Label zugreifen 
            labelProxyCount.Text = proxyCount.ToString()
        End If

    End Sub

    ' unsere invoke methode die innerhalb des
    ' UI Threads ausgeführt wird 
    Private Sub UpdateLabel()

        labelProxyCount.Text = labelProxyCount.Tag

    End Sub

End Class

Last edited May 13, 2012 at 7:34 PM by SebastianDotNet, version 10