Click here to Skip to main content
15,887,585 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more: , +
I have device that provides some real-time events, the manufacturer give me a dll for use that events and develop programs based on that device.
here is some of properties and events of that dll:

C#
    [ClassInterface(0)]
[ComSourceInterfaces("zkemkeeper._IZKEMEvents")]
[Guid("00853A19-BD51-419B-9269-2DABE57EB61F")]
[TypeLibType(2)]
public class CZKEMClass : IZKEM, CZKEM, _IZKEMEvents_Event
{
    public CZKEMClass();

    [DispId(79)]
    public virtual int AccGroup { get; set; }
    [DispId(76)]
    public virtual int BASE64 { get; set; }
    [DispId(2)]
    public virtual int CommPort { get; set; }
    [DispId(64)]
    public virtual int ConvertBIG5 { get; set; }
    [DispId(123)]
    public virtual int MachineNumber { get; set; }
    [DispId(78)]
    public virtual uint PIN2 { get; set; }
    [DispId(102)]
    public virtual int PINWidth { get; }
    [DispId(241)]
    public virtual int PullMode { get; set; }
    [DispId(1)]
    public virtual bool ReadMark { get; set; }
    [DispId(191)]
    public virtual int SSRPin { get; }

    public virtual event _IZKEMEvents_OnAlarmEventHandler OnAlarm;
    public virtual event _IZKEMEvents_OnAttTransactionEventHandler OnAttTransaction;
    public virtual event _IZKEMEvents_OnAttTransactionExEventHandler OnAttTransactionEx;
    public virtual event _IZKEMEvents_OnConnectedEventHandler OnConnected;
    public virtual event _IZKEMEvents_OnDeleteTemplateEventHandler OnDeleteTemplate;
    public virtual event _IZKEMEvents_OnDisConnectedEventHandler OnDisConnected;
    public virtual event _IZKEMEvents_OnDoorEventHandler OnDoor;
    public virtual event _IZKEMEvents_OnEMDataEventHandler OnEMData;
    public virtual event _IZKEMEvents_OnEmptyCardEventHandler OnEmptyCard;
    public virtual event _IZKEMEvents_OnEnrollFingerEventHandler OnEnrollFinger;
    public virtual event _IZKEMEvents_OnEnrollFingerExEventHandler OnEnrollFingerEx;
    public virtual event _IZKEMEvents_OnFingerEventHandler OnFinger;
    public virtual event _IZKEMEvents_OnFingerFeatureEventHandler OnFingerFeature;
    public virtual event _IZKEMEvents_OnHIDNumEventHandler OnHIDNum;
    public virtual event _IZKEMEvents_OnKeyPressEventHandler OnKeyPress;
    public virtual event _IZKEMEvents_OnNewUserEventHandler OnNewUser;
    public virtual event _IZKEMEvents_OnVerifyEventHandler OnVerify;
    public virtual event _IZKEMEvents_OnWriteCardEventHandler OnWriteCard;

they give me a sample code for realtime events like that:
C#
if (this.RegEvent(this.iNo, 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
        {
            _zkemkeeper.OnFinger += new zkemkeeper._IZKEMEvents_OnFingerEventHandler(axCZKEM1_OnFinger);
            _zkemkeeper.OnVerify += new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(axCZKEM1_OnVerify);
            _zkemkeeper.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
            _zkemkeeper.OnFingerFeature += new zkemkeeper._IZKEMEvents_OnFingerFeatureEventHandler(axCZKEM1_OnFingerFeature);
            _zkemkeeper.OnEnrollFingerEx += new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(axCZKEM1_OnEnrollFingerEx);
            _zkemkeeper.OnDeleteTemplate += new zkemkeeper._IZKEMEvents_OnDeleteTemplateEventHandler(axCZKEM1_OnDeleteTemplate);
            _zkemkeeper.OnNewUser += new zkemkeeper._IZKEMEvents_OnNewUserEventHandler(axCZKEM1_OnNewUser);
            _zkemkeeper.OnHIDNum += new zkemkeeper._IZKEMEvents_OnHIDNumEventHandler(axCZKEM1_OnHIDNum);
            _zkemkeeper.OnAlarm += new zkemkeeper._IZKEMEvents_OnAlarmEventHandler(axCZKEM1_OnAlarm);
            _zkemkeeper.OnDoor += new zkemkeeper._IZKEMEvents_OnDoorEventHandler(axCZKEM1_OnDoor);
            _zkemkeeper.OnWriteCard += new zkemkeeper._IZKEMEvents_OnWriteCardEventHandler(axCZKEM1_OnWriteCard);
            _zkemkeeper.OnEmptyCard += new zkemkeeper._IZKEMEvents_OnEmptyCardEventHandler(axCZKEM1_OnEmptyCard);
            _zkemkeeper.m_bRegisteredEvents = true;
            uLog("Ends");
        }

i can use this sample in my single-thread or a windows applications and it works and properly triggered that real-time events, but when i use it on multi-thread apps or in a service layer like a basic wcf service it doesn't work!
please help me

What I have tried:

I tried this code but it doesn't triggered events

public bool uRegEvents()
{
bool bResult = false;
bool bLock = false;
#if SEMAPHORE
if (m_axCZKEMLocker != this)
{
bLock = true;
m_axCZKEMLocker = this;
this.uWait();
}
#else
object lockObject = "string";
if (m_axCZKEMLocker != this)
{
bLock = true;
m_axCZKEMLocker = this;
lockObject = this;
}
lock(lockObject)
#endif
{
try
{
bResult = this.uRegEventsProtected(bResult);
}
catch(Exception ex)
{
bResult = uLog(ex.Message);
}
}
if (bLock)
{
#if SEMAPHORE
this.uRelease();
#endif
m_axCZKEMLocker = null;
}
return bResult;
}
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900