我正在制作“我自己的lync客户”。我在网上关注了几个有关如何使用Ui抑制模式对lync客户端进行签名的示例。我可以让客户端登录,但随后会立即通过注销和登录循环。
是什么原因造成的?
2014-11-12 08:18:30.4381|DEBUG|LyncWpf.MainWindow|InitClient
2014-11-12 08:18:31.2021|DEBUG|LyncWpf.MainWindow|InitializeCallback
2014-11-12 08:18:31.2131|DEBUG|LyncWpf.MainWindow|StateChanged Uninitialized to Initializing
2014-11-12 08:18:31.2131|DEBUG|LyncWpf.MainWindow|StateChanged Initializing to SignedOut
2014-11-12 08:18:31.4221|DEBUG|LyncWpf.MainWindow|StateChanged SignedOut to SigningIn
2014-11-12 08:18:51.8631|DEBUG|LyncWpf.MainWindow|SigninCallback
2014-11-12 08:18:52.0151|DEBUG|LyncWpf.MainWindow|StateChanged SigningIn to SignedIn
2014-11-12 08:18:52.0211|INFO|LyncWpf.MainWindow|signed in!
2014-11-12 08:18:52.5451|DEBUG|LyncWpf.MainWindow|StateChanged SignedIn to SigningOut
2014-11-12 08:18:52.5591|DEBUG|LyncWpf.MainWindow|StateChanged SigningOut to SigningIn
2014-11-12 08:18:53.6051|DEBUG|LyncWpf.MainWindow|StateChanged SigningIn to SignedIn
2014-11-12 08:18:53.6071|INFO|LyncWpf.MainWindow|signed in!
...repeated forever
代码示例。注意,我不会再次调用BeginSignIn。
private void _client_StateChanged(object sender, ClientStateChangedEventArgs e)
{
this.Log().Debug("StateChanged {0} to {1}", e.OldState.ToString(), e.NewState.ToString());
switch (e.NewState)
{
case ClientState.SignedIn:
this.Log().Info("signed in!");
break;
case ClientState.SignedOut:
if (e.OldState == ClientState.Initializing)
((LyncClient) sender).BeginSignIn(null, null, null, SigninCallback, sender);
break;
}
}
private void InitClient()
{
this.Log().Debug("InitClient");
_client = LyncClient.GetClient(true);
if (_client.InSuppressedMode)
{
_client.StateChanged += _client_StateChanged;
if (_client.State == ClientState.Uninitialized)
{
Object[] asyncState = { _client };
_client.BeginInitialize(InitializeCallback, asyncState);
}
}
}
private void InitializeCallback(IAsyncResult ar)
{
this.Log().Debug("InitializeCallback");
if (ar.IsCompleted)
{
object[] asyncState = (object[])ar.AsyncState;
((LyncClient)asyncState[0]).EndInitialize(ar);
}
}
private void SigninCallback(IAsyncResult ar)
{
this.Log().Debug("SigninCallback");
if (ar.IsCompleted)
{
try
{
((LyncClient)ar.AsyncState).EndSignIn(ar);
}
catch (RequestCanceledException re)
{
this.Log().Warn("SignIn Request Cancelled {0}", re.Message);
throw;
}
}
}
在应用程序的第二次运行中,我遇到了同样的问题。就我而言,这是因为Lync 2013关闭api无法正常工作,并且在内存中留下了lync的副本。当您第二次运行您的应用程序时,它将创建一个新的ui抑制模式lync实例,这两个实例似乎在争用每个登录名。
我发现解决此问题的唯一方法是杀死任何后台lync进程(即没有主窗口句柄)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句