C#调用C++DLL里面的回调函数,用嘱托方法,但委托的方法只被调用了一次,整个程序就退出了

C#调用C++DLL里面的回调函数,用委托方法,但委托的方法只被调用了一次,整个程序就退出了
//1.申明一个委托
        public delegate void recvDelegate(int a, int b);

        //2.定义一个方法
        private static void RecvChar(int data, int port)
        {
            int i = data;
        }

        private void btn_open_com_Click(object sender, EventArgs e)
        {
            Init(2, 9600, 'N', 8, 1);

            //3.创建一个委托对象,并将上面的方法包含其中
            recvDelegate d1 = new recvDelegate(RecvChar);
            SetReceiveFuntion(d1);//指定接收和处理数据的函数    
        }

我是用C++写了个串口通信的dll,现在想在C#里面调用,其中dll里有个函数是SetReceiveFuntion,
参数是函数指针,我查了下在C#里面应该用委托,但是现在遇到的问题是委托是可以了,但每次接收函数都只能运行一次,然后整个程序就退出了。
请问大家是怎么回事?
------解决方案--------------------
程序不正常退出,检查下系统日志中记录下的异常。
------解决方案--------------------
鼠标右键 我的电脑->管理,弹出页面中选择系统工具->事件查看器->系统。