现在的位置: 首页 > 综合 > 正文

C#自定义事件+线程实现CTI坐席来电客户信息提示

2013年08月02日 ⁄ 综合 ⁄ 共 2010字 ⁄ 字号 评论关闭

一、创建一个事件驱动的程序需要下面的步骤:
1. 声明关于事件的委托;
      (1)public delegate void EventHandler(object source, EventArgs e);

      (2)这里的EventArgs参数是用来进行事件参数传递的,如果在使用自定义事件的时候不需要传递参数直接使用EventArgs即可;如

果需要传递任何参数,需要定义一个继承自EventArgs的类,比如:MyEventArgs。在这个类中定义其属性即可,比如:
private DataTable dt;
public DataTable Dt
{
 get { return dt; }
 set { dt = value; }
}
。这样在事件处理中就可以使用e.Dt得到传递过来的参数。
 
2. 声明事件;
public event EventHandler OnXXXHandler;

3. 创建事件处理程序;
void OnXXX(object source, EventArgs e)
{
 ......
}

4. 注册事件处理程序;
OnXXXHandler += new EventHandler(OnXXX);

5. 在适当的条件下触发事件。
OnChangeHandler(this, new EventArgs());

 

二、具体项目实践
1.概述:实现当CTI来电到对应坐席的时候,由制作的对应坐席客户端提示出相应的客户资源,如果没有弹出新建客户资源。查找

客户根据来电的手机或者座机进行查找。

2.说明:CTI服务端已经建立完成(使用的是三汇的语音板卡),当客户来电的时候,会在CTI工控机中的数据库中自动插入一条数

据,其中有个状态字段state(0表示客户端没有处理,1表示已经处理)。

3.实现:通过在客户端使用线程+自定义事件完成对CTI服务器中的数据库进行监控,如果发现有状态为0和对应坐席编号便根据来

电号码在CRM中进行查询,并且显示处理。

4.具体代码:(这里主要讲述使用线程+自定义事件使用)
(1)首先还是进行委托、事件和线程声明,代码如下:
public delegate void EventHandler(object source, MyEventArgs e);//MyEventArgs是一个继承自EventArgs的子类,主要用

于传递来电号码等信息。
public event EventHandler OnChangeHandler;
Thread thread = null;

(2)创建线程对象、定义线程方法
this.thread = new Thread(new ThreadStart(RunInThread));
//定义一个线程方法
private void RunInThread()
{
 DataTable dt = null;
 while (true)
 {
  //GetDataTable是定义的查询CTI服务器数据库中对应坐席和状态为0的方法
  dt = this.GetDataTable();
  if (dt.Rows.Count > 0)
                {
                    MyEventArgs my = new MyEventArgs();
                    my.Dt = dt;
      //如果发现有新信息便触发事件
                    OnChangeHandler(this, my);
                }
 }
}

(3)定义一个事件处理函数
void OnInventoryHandler(object source, MyEventArgs e)
{
            //事件响应
            DataTable dt = e.Dt;
     //updataState是进行将对应的state进行修改为1,表示已经处理完成
            if (this.UpdateState(dt.Rows[0]["cr_id"].ToString()))
            {
                //修改成功
  //通过winform的WebBrowser控件访问对应的CRM资源查询页面
                this.webBrowser.Url = new Uri("http://192.168.0.26:8080/CTIJump.aspx?tel=" + dt.Rows[0]

["cr_call_number"].ToString());
            }
}

(4)注册事件
OnChangeHandler += new EventHandler(OnInventoryHandler);

(5)在客户端坐席登录后启动线程
this.thread.Start();

 

以上主要是讲述的其中使用的自定义事件+线程的运用,因为在具体的客户端和服务端还有一些实现,只是拿出了其中的部分代

码。如果各位还有更好的实现方法,不妨拿出来讨论一下!

 

抱歉!评论已关闭.