来电弹屏--线程间操作无效: 从不是创建控件的线程访问它

 //最近要做个来电弹屏,在主窗体添加了弹屏监听事件,当有来电时就弹出来窗体,显示来电会员信息。就在这一步,用了线程来弹屏,在弹出窗口绑定会员信息,结果“线程间操作无效: 从不是创建控件的线程访问它”
        //后面研究了线程,用了一个线程及委托来搞定了,记录下来,,怕以后又遇到。
        /// <summary>
        /// 监听消息
        /// </summary>
        /// <param name="m"></param>   
        protected override void DefWndProc(ref System.Windows.Forms.Message m)
        {
            switch (m.Msg)
            {
                case BriSDKLib.BRI_EVENT_MESSAGE:
                    {
                        BriSDKLib.TBriEvent_Data EventData = (BriSDKLib.TBriEvent_Data)Marshal.PtrToStructure(m.LParam, typeof(BriSDKLib.TBriEvent_Data));
                        string strValue = "";
                       
                        switch (EventData.lEventType)
                        {
                            //电话机摘机
                            case BriSDKLib.BriEvent_PhoneHook:
                                {
                                    strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":电话机摘机";
                                } break;
                            //电话机挂机
                            case BriSDKLib.BriEvent_PhoneHang:
                                {
                                    strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":电话机挂机";
                                    AddPhnoneLog(1);
                                } break;
                            //电话机来电响铃
                            case BriSDKLib.BriEvent_CallIn:
                                {
                                    两声响铃结束后开始呼叫转移到CC
                                    strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":来电响铃";
                                } break;
                            //接收到来电号码
                            case BriSDKLib.BriEvent_GetCallID:
                                {
                                    //strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":接收到来电号码 " + FromASCIIByteArray(EventData.szData);
                                    //接到来电,记录来电号码
                                    Str_Phone = FromASCIIByteArray(EventData.szData).Replace("\0","");

             //调用
                                    ShowPhone();
                                } break;
                            //停止呼入,产生未接号码
                            case BriSDKLib.BriEvent_StopCallIn:
                                {
                                   // strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":停止呼入,产生一个未接电话 ";
                                  
                                    //添加一条未接记录
                                    AddPhnoneLog(0);
                                   
                                } break;

                            case BriSDKLib.BriEvent_GetDTMFChar: strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":接收到按键 " + FromASCIIByteArray(EventData.szData); break;
                            case BriSDKLib.BriEvent_RemoteHang:
                                {
                                    strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":远程挂机 ";
                                } break;
                            case BriSDKLib.BriEvent_Busy:
                                {

                                    strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":接收到忙音,线路已经断开 ";
                                } break;
                            case BriSDKLib.BriEvent_DialTone:
                                strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":检测到拨号音 ";
                                break;
                            case BriSDKLib.BriEvent_PhoneDial:
                                strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":电话机拨号 " + FromASCIIByteArray(EventData.szData);
                                break;
                            case BriSDKLib.BriEvent_RingBack:
                                strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":拨号后接收到回铃音 ";
                                break;
                            case BriSDKLib.BriEvent_DevErr:
                                {
                                    if (EventData.lResult == 3)
                                    {
                                        strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":设备可能被移除 ";
                                    }
                                } break;
                            default: break;
                        }

                    } break;
                default:
                    base.DefWndProc(ref m);
                    break;
            }
        }

        /// <summary>
        /// 多线程显示来电会员信息
        /// </summary>
        private void ShowPhone()
        {
            Thread phoneThread = new Thread(new ThreadStart(ThreadShowPhone));
            phoneThread.IsBackground = true;
            phoneThread.Start();
        }

        /// <summary>
        /// 通过线程延时显示,避免登录加载速度慢
        /// 通过委托将弹屏显示为主窗体的模式窗体(不用委托将不能实现模式窗体)
        /// </summary>
        private void ThreadShowPhone()
        {
            ShowPhoneInvoke spInvoke = new ShowPhoneInvoke(InvokeShowPhone);
            this.BeginInvoke(spInvoke);
        }

        /// <summary>
        /// 显示窗口,http://www.jiwen123.com
        /// </summary>
        private void InvokeShowPhone()
        {
            comeMemInfo = new MemCard().GetModel(Str_Phone.Replace("\0", ""));
            if (comeMemInfo != null)
            {
                Phone phone = new Phone();
                phone.MemInfo = comeMemInfo;
                string condi = "MemID=" + comeMemInfo.CardID;
                phone.condition = condi.Split("|".ToCharArray());
                phone.ShowDialog();
            }
        }

转载于:https://www.cnblogs.com/IT-SmallBird/archive/2012/04/16/2451951.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
南京子佩录音盒开发包支持哪些操作系统?有哪些API函数?采用怎样的调用方式? · 二次开发包支持操作系统:win9x/winme/win2000/xp/win2003/vista,win 7 · API接口使用两种模式提供: 1 采用标准的windows DLL库形式提供,可以在支持DLL模式开发的平台下使用。(如:vb,vc,Delphi,vfp,c#,pb,cb等) 1 产用经过数字签名的标准windows 组件模式提供,开发接口跟语言无关,可用在所有windows系统,包括B/S系统开发。支持所有windows开发环境 · 开发包提供API模块分为以下几个模块: o 设备放音相关(包括缓冲时时放音,文件放音等) o 设备录音相关(包括缓冲时时录音,文件录音等) o 标准信号音检测控制(无须人工设置频率,自动识别线路频率) o 软件摘/挂机拨号,来电弹屏相关 o 各种设备型号的功能控制接口 o 单路开发模块提供语音识别控制 o 多路开发包提供软交换控制模块 子佩电话录音盒来电号码显示支持哪些制式?准确精度达到什么程度?是否支持二次电话按键和发码? 子佩USB语音盒支持标准的DTMF与FSK的双制式CID主叫号识别,识别率达到100%。是目前来电号码识别精度最高的电话管理设备之一。子佩USB语音盒支持二次电话按键DTMF识别,支持不同速率对电话线路DTMF发码。最常用的二次开发USB电话语音盒有哪几种? 子佩二次开发USB电话语音盒,除了有电话话机接口与耳麦接口型区分外,大致还可分为两种类型:第一种功能相对简单,支持开发获取CID(主叫号码)来电显示,实现电话通话录音,型号为:R1、C2-R、C4-R、C7-R等。您的客户来电管理软件或CRM软件,只需要获取来电号码,实现资料弹屏的二次开发时,可以选择以上型号。第二种功能相对丰富,除实现第一种所具有的基本功能外,还可实现软件拨号、电话留言、控制话机振铃、软交换、IP网关等,具体视不同型号而定,例如:P1、B3、C2-LP、C7-LPQ等。您的客户来电管理软件或CRM软件,以及电话查询系统、电话通知系统、小型呼叫中心系统,可以选择以上相关型号。 南京子佩科技公司在为合作伙伴提供先进的产品同时、也要为二次开发合作伙伴获得产品整合后的市场竞争优势,包括产品价格和产品性能。子佩更希望在合作伙伴的支持下,实现互惠互利,一起获得双盈。 www.dianhua168.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值