pjsip c#,System.AccessViolationException在单独线程上应答传入呼叫时发生异常
在pjsip c#,System.AccessViolationException在单独线程上应答传入呼叫时发生异常,c#,wpf,multithreading,sip,pjsip,C#,Wpf,Multithreading,Sip,Pjsip,在重写的void onIncomingCall中,我打开了一个新的后台线程,它显示了一个新(弹出)表单。 我尝试接听或拒绝此表单中的呼叫,但随后得到一个System.AccessViolationException. 当前调用对象似乎已锁定,无法从其他窗体访问。 如果我在onIncomingCallvoid中使用currentcall.answer(prm),则调用成功建立(没有其他表单和线程) 经过疯狂的搜索和尝试,我终于找到了答案。 每个线程都必须在端点中注册,您可以在另一个类(窗口)中挂断
重写的void onIncomingCall
中,我打开了一个新的后台线程,它显示了一个新(弹出)表单
。
我尝试接听或拒绝此表单中的呼叫,但随后得到一个System.AccessViolationException.
当前调用对象似乎已锁定,无法从其他窗体访问。
如果我在onIncomingCall
void中使用currentcall.answer(prm)
,则调用成功建立(没有其他表单和线程)
经过疯狂的搜索和尝试,我终于找到了答案。 每个线程都必须在端点中注册,您可以在另一个类(窗口)中挂断、接听或转接呼叫 您只需在公共类中编写此方法,并在每次从其他窗口调用void时调用此void->
public void callpopup(String number) {
checkThread();
//answer, decline or something else
}
[MethodImpl(MethodImplOptions.Synchronized)]
public static void checkThread()
{
try
{
if (ep != null && !ep.libIsThreadRegistered())
ep.libRegisterThread(Thread.CurrentThread.Name);
}
catch (Exception e)
{
}
}
EP refeer指向端点实例。请注意,线程池中的线程没有名称。请确保为它们指定名称,否则可能会发生空引用异常。
public void callpopup(String number) {
checkThread();
//answer, decline or something else
}
[MethodImpl(MethodImplOptions.Synchronized)]
public static void checkThread()
{
try
{
if (ep != null && !ep.libIsThreadRegistered())
ep.libRegisterThread(Thread.CurrentThread.Name);
}
catch (Exception e)
{
}
}