【发布时间】:2016-08-18 12:14:39
【问题描述】:
我有提供一些实时事件的设备,制造商给了我一个 dll 用于使用该事件并基于该设备开发程序。 这是该 dll 的一些属性和事件:
[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;
他们给了我一个这样的实时事件的示例代码:
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");
}
我可以在我的单线程或 Windows 应用程序中使用此示例,它可以正常工作并正确触发实时事件,但是当我在多线程应用程序或服务层(如基本 wcf 服务)中使用它时不工作! 请帮帮我
【问题讨论】:
标签: c# multithreading wcf