我在C#中为地面线路电话编写TAPI 3.0应用程序。 我的目标是接收和记录呼叫。 到目前为止,在我的代码中,第一次调用一切正常,所有事件都触发。Tapi 3和C#第一次调用后没有事件触发
但不幸的是,所有后续调用完全由TAPI第一个电话后忽略
没有任何事件触发,直到我再次重新启动应用程序。
一件事,我已经找到了,而如果我重置基于Tapi例如它可以解决我的问题,谷歌搜索,
谁能告诉如何重置基于Tapi对象?
这里是我的代码
void initializetapi3()
{
try
{
tobj = new TAPIClass();
tobj.Initialize();
IEnumAddress ea=tobj.EnumerateAddresses();
ITAddress ln;
uint arg3=0;
lines=0;
cn=new callnotification();
cn.addtolist=new callnotification.listshow(this.status);
tobj.ITTAPIEventNotification_Event_Event+= new TAPI3Lib.ITTAPIEventNotification_EventEventHandler(cn.Event);
tobj.EventFilter=(int)(TAPI_EVENT.TE_CALLNOTIFICATION|
TAPI_EVENT.TE_DIGITEVENT|
TAPI_EVENT.TE_PHONEEVENT|
TAPI_EVENT.TE_CALLSTATE|
TAPI_EVENT.TE_GENERATEEVENT|
TAPI_EVENT.TE_GATHERDIGITS|
TAPI_EVENT.TE_REQUEST|TAPI_EVENT.TE_CALLINFOCHANGE);
for(int i=0;i<10;i++)
{
ea.Next(1,out ln,ref arg3);
ia[i]=ln;
if(ln!=null)
{
comboBox1.Items.Add(ia[i].AddressName);
lines++;
}
else
break;
}
}
catch(Exception e)
{
MessageBox.Show(e.ToString());
}
}
delegate void valueDelegate(string value);
public void status(string str)
{
if (textBox1.InvokeRequired)
{
textBox1.Invoke(new valueDelegate(status), str);
}
else
{
textBox1.Text = str;
}
}
public void Event(TAPI3Lib.TAPI_EVENT te, object eobj)
{
switch (te)
{
case TAPI3Lib.TAPI_EVENT.TE_CALLNOTIFICATION:
status("call notification event has occured");
break;
case TAPI3Lib.TAPI_EVENT.TE_PHONEEVENT:
status("A phone event!");
break;
case TAPI3Lib.TAPI_EVENT.TE_CALLSTATE:
TAPI3Lib.ITCallStateEvent a = (TAPI3Lib.ITCallStateEvent)eobj;
TAPI3Lib.ITCallInfo b = a.Call;
switch (b.CallState)
{
case TAPI3Lib.CALL_STATE.CS_INPROGRESS:
status("dialing");
break;
case TAPI3Lib.CALL_STATE.CS_CONNECTED:
status("Connected");
break;
case TAPI3Lib.CALL_STATE.CS_DISCONNECTED:
status("Disconnected");
break;
case TAPI3Lib.CALL_STATE.CS_OFFERING:
status("A party wants to communicate with you!");
break;
case TAPI3Lib.CALL_STATE.CS_IDLE:
status("Call is created!");
break;
}
break;
}
}
我想避免下面的第一个解决方案,如果可以的话,下面的第二个解决方案不适合我。你自己找到了解决方案吗? – Rob
没关系,我找到了解决办法,看到下面的答案 – Rob