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