1

Lync SDK を使用してクライアントをサイド バイ サイドで起動し、シャットダウンすると、終了しない孤立したホスト プロセスが残ります。プロセスを削除するには、コードまたはタスク マネージャーを使用してプロセスを手動で強制終了する必要があります。したがって、アプリケーションの起動時にコードを使用します。同時に複数のプロセスが実行されている場合、他の問題が発生し、プロセスが無期限に残ります。

そこにあるすべてのMSDNのハウツーと例に従いましたが、それでも同じ動作が発生します。これは、私が書いたラッパー クラスのコードです。

    public void Startup()
    {
        // Same thread should do the startup and shutdown right?
        var _currentThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId;

        this.KillRunningBackgroundProcesses("lync");
        lyncClient = Microsoft.Lync.Model.LyncClient.GetClient(_sideBySide);

        // Init lync (needed for side-by-side)
        if (lyncClient.State == Microsoft.Lync.Model.ClientState.Uninitialized)
        {
            lyncClient.BeginInitialize(
                (result) => { lyncClient.EndInitialize(result); }
                , null);
        }

        // Wire events
        lyncClient.StateChanged += lyncClient_StateChanged;
        lyncClient.CredentialRequested += lyncClient_CredentialRequested;
        lyncClient.SignInDelayed += lyncClient_SignInDelayed;
        lyncClient.CapabilitiesChanged += lyncClient_CapabilitiesChanged;
        lyncClient.ClientDisconnected += lyncClient_ClientDisconnected;
        lyncClient.ConversationManager.ConversationRemoved += lyncClient_ConversationManager_ConversationRemoved;
        lyncClient.ConversationManager.ConversationAdded += lyncClient_ConversationManager_ConversationAdded;
    }

これはシャットダウンコードです:

    public void Shutdown()
    {
        // Same thread should do the startup and shutdown right?
        var _currentThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId;

        // Unwire events
        lyncClient.StateChanged -= lyncClient_StateChanged;
        lyncClient.CredentialRequested -= lyncClient_CredentialRequested;
        lyncClient.SignInDelayed -= lyncClient_SignInDelayed;
        lyncClient.CapabilitiesChanged -= lyncClient_CapabilitiesChanged;
        lyncClient.ClientDisconnected -= lyncClient_ClientDisconnected;
        lyncClient.ConversationManager.ConversationRemoved -= lyncClient_ConversationManager_ConversationRemoved;
        lyncClient.ConversationManager.ConversationAdded -= lyncClient_ConversationManager_ConversationAdded;

        //this.lyncClient.BeginShutdown(this.lyncClient.EndShutdown, someStateObject);
        this.lyncClient.BeginShutdown( 
            (result) => { this.lyncClient.EndShutdown(result); }
            , null );

        this.lyncClient = null;
    }

Lync クライアントを正常に終了/シャットダウンするにはどうすればよいですか?

4

1 に答える 1