我正在设计的Lync客户端出现问题。我在UI抑制模式下运行Lync 2013,我可以发送/接收即时通讯,并开始音频通话。但是当我尝试从其他人那里接收音频对话时会出现问题。当我尝试调用这行代码时,我得到一个System.UnauthorizedAccessException:
conv.Modalities[ModalityTypes.AudioVideo].BeginConnect(ModalityCallback, asyncState);
它运行完全正常,否则通话没问题,我可以听到和对方说话很好,但我的用户界面冻结,我无法控制任何由于此错误。即使对方挂断,我也必须在任务管理器中终止该过程。
这是我的InitiateAVStream方法,基于MSDN Join Lync conversation example:
public bool InitiateAVStream()
{
Console.WriteLine("InitiateAVStream");
if (conv.State == ConversationState.Terminated)
{
return false;
}
if (conv.Modalities[ModalityTypes.AudioVideo].CanInvoke(ModalityAction.Connect))
{
conv.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += _AVModality_ModalityStateChanged;
conv.Modalities[ModalityTypes.AudioVideo].ActionAvailabilityChanged += _AVModality_ActionAvailabilityChanged;
//Accept the notification. If Lync UI is enabled, incoming call notification is closed.
conv.Modalities[ModalityTypes.AudioVideo].Accept();
//Connect the AV modality and begin to send and received AV stream.
object[] asyncState = { conv.Modalities[ModalityTypes.AudioVideo], "CONNECT" };
try
{
conv.Modalities[ModalityTypes.AudioVideo].BeginConnect(ModalityCallback, asyncState);
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
return true;
}
return false;
}
输出消息:
A first chance exception of type 'System.UnauthorizedAccessException' occurred in Microsoft.Lync.Model.dll
at Microsoft.Office.Uc.ModalityClass.Connect(ModalityConnectOptions _options, Object _modalityCallback, Object _state)
at Microsoft.Lync.Model.Conversation.Modality.BeginConnect_private(ModalityConnectOptions options, AsyncCallback modalityCallback, Object state)
at Microsoft.Lync.Model.Conversation.Modality.BeginConnect(AsyncCallback modalityCallback, Object state)
at UIPrototype.MeetingForm.InitiateAVStream() in c:\Users\morrissi\Documents\Visual Studio 2012\Projects\UIPrototype\UIPrototype\MeetingForm.cs:line 758
任何输入都将不胜感激。我很奇怪,只有当我尝试接听来电音频时才会发生这种情况。其他一切都很好。我还没有开始视频通话工作,但是一旦我开始工作,我就会开始工作。
由于
编辑:
使用BeginRetrieve替换BeginConnect仍会引发相同的错误并产生相同的结果。仍然不确定该怎么做。
答案 0 :(得分:1)
您从哪里运行应用程序?我有一个非常相似的堆栈跟踪,并将应用程序移动到“C:\ Users \ MyUser”解决了我的问题。
答案 1 :(得分:1)
我能够解决问题。显然,当您仅连接音频呼叫时,您需要的唯一线路是
conv.Modalities[ModalityTypes.AudioVideo].Accept();
您无需调用BeginConnect来连接音频。删除BeginConnect可防止抛出错误,并且音频连接正常。 BeginConnect用于连接视频。
我的问题是表单没有完全加载和冻结是无关的,它出现了。这是因为我试图在ConversationManager_ConversationAdded中创建一个新表单。如果我尝试在按钮单击上创建一个新表单,它加载就好并且有效,但似乎是阻止它正常工作的事件。
我不能很好地识别Lync或C#引起错误的时间。