我不知道是怎么了,调用COM组件后,程序响应异常缓慢,甚至执行不下去
------------------------------------------------------------
具体情况是这样的,我写了一个DLL,里面封装了一个读卡的COM组件,里面用到了线程Timer,在线程Timer里面,当读到数据就会触发一个事件,这个DLL就是这样的
在我的项目里面,我用线程调用了这个读卡的类,通过上面说的那个事件来做我要做的事情,在这个事件里面,我还会调用一个自定义函数来处理一些东西,奇怪的问题是,程序没有报任何的错误,但是就是执行到事件函数的时候,就会异常的缓慢,到执行那个自定义的函数就执行不下去了,望大家帮我看看是怎么回事,我在线等

解决方案 »

  1.   

    1、试试异步委托,
    2、把你的dll加一层com封装
      

  2.   

    我用了异步委托执行调,还是不行,我把实现的代码贴出来,大家帮我看看问题所在
    --------------------------
    using System;
    using System.Text;
    using System.Threading;
    using COMRD800Lib;namespace XZK
    {
    /// <summary>
    /// Reader_Carder 的摘要说明。
    /// </summary>
    /// 
    public delegate string AsyncDelegate(bool callDuration);
    public class Reader_Carder
    {
    RD800Class  rd = new RD800Class();
    private Timer timer = null;
     
    /// <summary>
    /// 返回卡序列号
    /// </summary> public Reader_Carder()
    {
    while(!this.ComOpen())
    {
    this.ComClose();
    }
    } #region 初始化串口 private bool ComOpen()
    {
    if(rd.dc_init(100,115200)>0)
    {
    return true;
    }
    else
    {
    return false;
    }
    } #endregion #region 关闭串口 private bool ComClose()
    {
    if(rd.dc_exit() == 0)
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    #endregion #region 蜂鸣
    private bool ComSound(int times)
    {
    if(rd.dc_beep(Convert.ToInt16(times)) >= 0)
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    #endregion  #region 读卡
    /// <summary>
    /// 读卡
    /// </summary>
    /// <returns>卡序列号</returns>
    public string ReadCarder(bool bol)
    {
    object data = null;
    while(bol)
    {
    if(this.rd.dc_card(100,ref data) == 0)
    {
    bol = false;
    }
    }
    return data.ToString();
    }
    #endregion
    }
    public class AsyncMain 
    {
    public delegate void Handler(string callDuration);
    public event Handler Read_Event ;
    public AsyncMain()
    {
    Reader_Carder ad = new Reader_Carder();
    AsyncDelegate dlgt = new AsyncDelegate(ad.ReadCarder);
       
    IAsyncResult ar = dlgt.BeginInvoke(true,new AsyncCallback(CallbackMethod),dlgt );
    }
        
    void CallbackMethod(IAsyncResult ar) 
    {
    AsyncDelegate dlgt = (AsyncDelegate) ar.AsyncState;
    if(Read_Event != null)
    {
    string ret = dlgt.EndInvoke( ar);
    Read_Event(ret);
    }
    }
    }
    }