调用Lync Client的BeginSignIn时触发InvalidOperationException异常求助
解决Lync Client BeginSignIn时的InvalidOperationException异常
这个异常的核心原因很明确:你在调用BeginSignOut后,没有等待异步登出操作完全完成,就直接发起了BeginSignIn请求。Lync Client的状态是严格流转的,当客户端处于SigningOut的中间状态时,不允许执行登录操作,否则就会抛出「由于对象的当前状态,操作无效」的错误。
下面给你几个可行的解决方案:
1. 等待异步登出完成后再执行登录
BeginSignOut是异步方法,必须调用EndSignOut来完成整个登出流程。你可以在登出的回调里完成收尾,再触发登录逻辑:
try { if (_LyncClient.State == ClientState.SignedIn) { _LyncClient.BeginSignOut(ar => { try { // 完成异步登出操作,这一步是必须的 _LyncClient.EndSignOut(ar); // 登出完成后,执行登录逻辑 StartSignInProcess(); } catch (Exception ex) { // 处理登出过程中出现的异常 Console.WriteLine($"登出失败: {ex.Message}"); } }, null); } else { // 如果已经处于未登录状态,直接启动登录 StartSignInProcess(); } } catch (Exception ex) { Console.WriteLine($"处理登出前置检查失败: {ex.Message}"); } // 封装的登录方法 private void StartSignInProcess() { // 先检查当前状态是否允许登录 if (_LyncClient.State != ClientState.SignedOut && _LyncClient.State != ClientState.SignInRequired) { Console.WriteLine($"当前状态{_LyncClient.State}不允许登录"); return; } try { // 替换为你的账号信息 _LyncClient.BeginSignIn( "your-username", "your-password", "your-domain", ar => { try { _LyncClient.EndSignIn(ar); Console.WriteLine("登录成功"); } catch (Exception ex) { Console.WriteLine($"登录失败: {ex.Message}"); } }, null ); } catch (Exception ex) { Console.WriteLine($"发起登录请求失败: {ex.Message}"); } }
2. 利用StateChanged事件监听状态流转
你已经注册了StateChanged事件,可以通过这个事件精准捕捉到客户端完全登出的状态,再触发登录:
private void _LyncClient_StateChanged(object sender, ClientStateChangedEventArgs e) { Console.WriteLine($"客户端状态变化: {e.OldState} -> {e.NewState}"); // 当状态变为SignedOut时,启动登录 if (e.NewState == ClientState.SignedOut) { StartSignInProcess(); } // 可选:如果处于SigningOut状态,可以禁用登录按钮或阻止登录请求 if (e.NewState == ClientState.SigningOut) { // 标记当前正在登出,禁止发起登录 _isSigningOut = true; } }
3. 额外的注意事项
- 状态检查前置:每次调用
BeginSignIn前,一定要检查当前客户端状态是否为SignedOut或SignInRequired,这两个状态是唯一允许发起登录的状态。 - 避免并发操作:可以加一个布尔标记(比如
_isProcessingAuth),在登出或登录过程中标记为true,防止重复触发操作,避免状态混乱。 - 异常兜底:在
BeginSignIn和BeginSignOut的回调里一定要用try-catch包裹EndXXX方法,异步操作的异常只会在调用EndXXX时抛出。
内容的提问来源于stack exchange,提问作者urlreader
相关产品推荐
相关产品推荐

