C# 在Lync中检测传入呼叫

C# 在Lync中检测传入呼叫,c#,lync,C#,Lync,我正在尝试检测Lync客户端中的传入呼叫。这是通过订阅Lync客户端中的ConversationManager.ConversationAdded事件来完成的,如中所述 但是,如果在呼叫者呼叫之前已经打开了与呼叫者的对话窗口,则使用此方法无法检测到传入呼叫。 例如,如果我正在与朋友聊天,因此打开了对话窗口,而该朋友决定给我打电话,则不会触发ConversationAdded事件 当我已经与来电者进行了积极对话时,如何检测来电 谢谢, Nicklas您应该订阅对话模式[ModalityTypes.

我正在尝试检测Lync客户端中的传入呼叫。这是通过订阅Lync客户端中的ConversationManager.ConversationAdded事件来完成的,如中所述

但是,如果在呼叫者呼叫之前已经打开了与呼叫者的对话窗口,则使用此方法无法检测到传入呼叫。 例如,如果我正在与朋友聊天,因此打开了对话窗口,而该朋友决定给我打电话,则不会触发ConversationAdded事件

当我已经与来电者进行了积极对话时,如何检测来电

谢谢,
Nicklas

您应该订阅对话模式[ModalityTypes.AudioVideo]上的ModalityStateChanged事件,这将在AV模式创建或更改状态时为您提供事件。

您需要监控对话模式的状态。两种可用的模式是IM和AV,因此您需要注意这些模式的状态变化,如:

void ConversationManager_ConversationAdded(object sender, Microsoft.Lync.Model.Conversation.ConversationManagerEventArgs e)
{
    e.Conversation.Modalities[ModalityTypes.InstantMessage].ModalityStateChanged += IMModalityStateChanged;
    e.Conversation.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += AVModalityStateChanged;
}

void IMModalityStateChanged(object sender, ModalityStateChangedEventArgs e)
{
    if (e.NewState == ModalityState.Connected)
        MessageBox.Show("IM Modality Connected");
}

void AVModalityStateChanged(object sender, ModalityStateChangedEventArgs e)
{
    if (e.NewState == ModalityState.Connected)
        MessageBox.Show("AV Modality Connected");
}
此示例使用ConversationAdded事件为模态更改连接事件处理程序,因此这仅适用于在应用程序运行时启动的会话。要对应用程序启动前已处于活动状态的对话执行相同操作,可以将以下代码添加到应用程序的启动例程中:

foreach (var conv in _lync.ConversationManager.Conversations)
{
    conv.Modalities[ModalityTypes.InstantMessage].ModalityStateChanged += new EventHandler<ModalityStateChangedEventArgs>(IMModalityStateChanged);
    conv.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += new EventHandler<ModalityStateChangedEventArgs>(AVModalityStateChanged);
}
foreach(var conv in _lync.ConversationManager.Conversations)
{
conv.modules[ModalityTypes.InstantMessage].ModalityStateChanged+=new EventHandler(IMModalityStateChanged);
conv.models[modalitypes.AudioVideo].ModalityStateChanged+=neweventhandler(AVModalityStateChanged);
}