У меня есть приложение winform для подключения и прослушивания 30 устройств записи расписания. Моя программа пишет около 10000 записей в день. Но до сих пор не хватает около 300-400 записей в день. Я думаю, много событий происходит в секунду. Как избежать пропущенных записей? Пожалуйста, помогите мне, спасибо!
/ ************* Это мой исходный код ************** /
//ZkemClient.cs: using zkemkeeper.dll
public bool Connect_Net(string IPAdd, int Port)
{
if (objCZKEM.Connect_Net(IPAdd, Port))
{
//objCZKEM.OnConnected -= new _IZKEMEvents_OnConnectedEventHandler(ObjCZKEM_OnConnected);
//objCZKEM.OnDisConnected -= new _IZKEMEvents_OnDisConnectedEventHandler(objCZKEM_OnDisConnected);
//objCZKEM.OnEnrollFinger -= ObjCZKEM_OnEnrollFinger;
//objCZKEM.OnFinger -= ObjCZKEM_OnFinger;
//objCZKEM.OnAttTransactionEx -= new _IZKEMEvents_OnAttTransactionExEventHandler(zkemClient_OnAttTransactionEx);
//65535, 32767
if (objCZKEM.RegEvent(1, 65535))
{
// [ Register your events here ]
// [ Go through the _IZKEMEvents_Event class for a complete list of events
objCZKEM.OnConnected += new _IZKEMEvents_OnConnectedEventHandler(ObjCZKEM_OnConnected);
objCZKEM.OnDisConnected += new _IZKEMEvents_OnDisConnectedEventHandler(objCZKEM_OnDisConnected);
objCZKEM.OnEnrollFinger += ObjCZKEM_OnEnrollFinger;
objCZKEM.OnFinger += ObjCZKEM_OnFinger;
objCZKEM.OnAttTransactionEx += new _IZKEMEvents_OnAttTransactionExEventHandler(zkemClient_OnAttTransactionEx);
}
/*if (!objCZKEM.DisableDeviceWithTimeOut(Int16.Parse(iMachineCode), 1))
{
objCZKEM.GetLastError(ref iLastError);
Logger.wrteLogError("System", "ZKTeco Error Code", iLastError.ToString(), "");
}*/
return true;
}
else
{
objCZKEM.GetLastError(ref iLastError);
Logger.wrteLogError("System", "ZKTeco Error Code", iLastError.ToString(),"");
}
return false;
}
private void zkemClient_OnAttTransactionEx(string EnrollNumber, int IsInValid, int AttState, int VerifyMethod, int Year, int Month, int Day, int Hour, int Minute, int Second, int WorkCode)
{
try
{
using (StreamWriter writetext = new StreamWriter(@"log\write.txt", true))
{
String sVerifyMethod = "";
switch (VerifyMethod)
{
case 0:
sVerifyMethod = "Password";
break;
case 1:
sVerifyMethod = "Finger";
break;
case 2:
sVerifyMethod = "Card";
break;
default:
sVerifyMethod = "Unknow";
break;
}
String sScanDate = Year + "/" + Month + "/" + Day + " " + Hour + ":" + Minute + ":" + Second;
writetext.WriteLine(iMachineCode + "," + EnrollNumber + "," + sScanDate + "," + DateTime.Now + "," + sVerifyMethod + "," + VerifyMethod);
writetext.Flush();
writetext.Close();
}
}
catch (Exception ex)
{
objCZKEM.GetLastError(ref iLastError);
Logger.wrteLogError("Tran EnrollNumber, "transfer failed with error code " + iLastError, ex.Message + " " + ex.StackTrace.ToString());
}
}
//MasterForm.cs: for connect 30 devices and listen
Int iMaxDeviceQty = 30;
public static ZkemClient[] objZkeeperList = new ZkemClient[iMaxDeviceQty];
for (int i = 0; i < objVNMDeviceInfo.Count; i++)
{
objZkeeperList[i] = new ZkemClient(RaiseDeviceEventNew, objVNMDeviceInfo[i].MachineNumber.ToString(), sConnectionString);
isConnect = objZkeeperList[i].Connect_Net(objVNMDeviceInfo[i].IPAddress, int.Parse(objVNMDeviceInfo[i].Port));
if (isConnect == true)
{
Logger.wrteLog(objVNMDeviceInfo[i].IPAddress, objVNMDeviceInfo[i].MachineNumber.ToString(), "connect successfully");
}
}