Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pjsip c#,System.AccessViolationException在单独线程上应答传入呼叫时发生异常_C#_Wpf_Multithreading_Sip_Pjsip - Fatal编程技术网

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)
        {


        }
    }