C# Lync SDK — подписка LyncClient на события

Я начал создавать приложение WinForms для Lync SDK. Я хочу, чтобы клиент подписывался на некоторые события.

public partial class FrmMain : Form
{
        public FrmMain()
        {
            InitializeComponent();
            client = new Client(this);
        }
}



    internal class Client
    {
        public Client(FrmMain frm)
        {
            this.frm = frm;
        }

        private FrmMain frm;

        public LyncClient Instance
        {
            get
            {
                LyncClient client = null;

                try
                {
                    client = LyncClient.GetClient();
                }
                catch (ClientNotFoundException)
                {
                }

                return client;
            }
        }

        private void Client_StateChanged(Object source, ClientStateChangedEventArgs e)
        {
            frm.UpdateSignedInState();
        }
}

Где я должен подписаться на событие client.StateChanged?

client.StateChanged += Client_StateChanged;

При закрытии моего клиента Lync или отключении я потеряю текущий экземпляр, поэтому где мне нужно подписаться на событие, которое всегда будет запускаться при изменении состояния?


person hrp8sfH4xQ4    schedule 14.08.2018    source источник


Ответы (1)


Правильно - экземпляр доступен только во время работы клиента, поэтому, когда он не работает, ему не к чему подключаться.

Распространенным шаблоном является установка таймера, когда клиент отключается, и вызов GetClient() в обратном вызове. Если это удастся, подключите свои события. В противном случае сбросьте таймер и повторите попытку!

person Paul Nearney    schedule 14.08.2018
comment
Так что мне придется настроить событие отключения и обработать его там? - person hrp8sfH4xQ4; 14.08.2018
comment
Да. И имейте в виду, что событие Disconnect не всегда срабатывает сразу после закрытия клиента, но вы можете принудительно запустить его, например. чтение государственной собственности. Таким образом, вы можете использовать один и тот же таймер, когда клиент работает, для вызова _client.State через равные промежутки времени, чтобы обеспечить своевременное срабатывание события Disconnect. - person Paul Nearney; 14.08.2018
comment
Не могли бы вы предоставить небольшой пример кода? Потому что когда мне придется настраивать свои события? В рамках попытки поймать? Как удалить текущие обработчики событий после потери текущего экземпляра? Я думаю, что могут возникнуть некоторые проблемы - person hrp8sfH4xQ4; 14.08.2018
comment
Извините - у меня нет никакого кода под рукой, я просто беру его из памяти, так как я уже несколько раз укусил это! - person Paul Nearney; 14.08.2018