This project has moved. For the latest updates, please go here.

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.

int NetOffice.Factory.ProxyCount { get; };

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

public static event ProxyCountChangedHandler NetOffice.Factory.ProxyCountChanged;

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

class SampleForm : Form 
{ 
    public SampleForm() 
    { 
        InitializeComponent(); 

        // Das Event ProxyCountChangedEvent abbonieren 
        NetOffice.ProxyCountChanged += 
        new ProxyCountChangedHandler(ProxyCountChanged); 
    } 

    void ProxyCountChanged(int proxyCount) 
    { 
         if (labelProxyCount.InvokeRequired) 
         { 
            // wir benötigen ein Invoke da der Aufruf aus 
            // einem anderen Thread erfolgt ist 
            labelProxyCount.Tag = proxyCount.ToString(); 
            labelProxyCount.Invoke(new MethodInvoker(UpdateLabel)); 
         } 
         else 
         { 
            // wir benötigen kein Invoke und können
            // direkt auf unser Label zugreifen 
            labelProxyCount.Text = proxyCount.ToString(); 
         } 
   } 

    // unsere invoke methode die innerhalb des
    // UI Threads ausgeführt wird 
    private void UpdateLabel() 
    { 
            labelProxyCount.Text = labelProxyCount.Tag as string; 
    } 
} 

Last edited May 13, 2012 at 7:36 PM by SebastianDotNet, version 14

Comments

No comments yet.