【问题标题】:How to get digital persona OnEnroll events in C#如何在 C# 中获取数字角色 OnEnroll 事件
【发布时间】:2019-12-13 11:18:22
【问题描述】:

我正在使用 Windows 应用程序从 VB 迁移到 C#;我正在使用数字角色指纹扫描仪来捕获工作正常的员工指纹,但我无法在 C# 中获取 OnEnroll 事件 - 这是我在 VB 上所做的。

这是我的 VB 代码

Private allReaderSerial As String = "00000000-0000-0000-0000-000000000000"
Private WithEvents enrollControl As DPFP.Gui.Enrollment.EnrollmentControl

Private Sub CreateDPControl(ByRef control As DPFP.Gui.Enrollment.EnrollmentControl)
    Try
        control = New DPFP.Gui.Enrollment.EnrollmentControl()
        control.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink
        control.MaxEnrollFingerCount = 1
        control.Name = "enrollControl"
        control.Location = New System.Drawing.Point(0, 0)
        control.ReaderSerialNumber = "00000000-0000-0000-0000-000000000000"
        control.Visible = True
        control.Enabled = True
        Me.Controls.Add(control)
    Catch ex As Exception
        MessageBox.Show("exception", MsgTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    End Try
End Sub

Private Sub frmBioCapture_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If enrollControl Is Nothing Then
        CreateDPControl(enrollControl)
    End If
End Sub

Private WithEvents enrollControl As DPFP.Gui.Enrollment.EnrollmentControl
Private Sub enrollControl_OnEnroll(ByVal Control As Object, ByVal FingerMask As Integer, ByVal temp As DPFP.Template, ByRef EventHandlerStatus As DPFP.Gui.EventHandlerStatus) Handles enrollControl.OnEnroll
    staffTemplate = temp
    Me.Hide()
End Sub

Private Sub enrollControl_OnReaderDisconnect(Control As Object, ReaderSerialNumber As String, Finger As Integer) Handles enrollControl.OnReaderDisconnect
    MsgBox("Fingerprint reader is not conneted. Connect fingerprint reader.", vbExclamation, MsgTitle)
    Exit Sub
End Sub

上面的代码运行良好,可以使用

获取OnEnroll 事件
Handles enrollControl.OnEnroll

我想在 C# 中实现相同的任务 - 下面是我目前编写的代码:

private string allReaderSerialize = "00000000-0000-0000-0000-000000000000";
private DPFP.Gui.Enrollment.EnrollmentControl enrollControl;
private DPFP.Template template;

public FrmCapture()
{
    InitializeComponent();
}

private void CreateDPControl(DPFP.Gui.Enrollment.EnrollmentControl control)
{
    try
    {
        control = new DPFP.Gui.Enrollment.EnrollmentControl
            {
                AutoSizeMode = AutoSizeMode.GrowAndShrink,
                MaxEnrollFingerCount = 2,
                Name = "enrollControl",
                BackgroundImage = Properties.Resources.FormBackground,
                BackgroundImageLayout = ImageLayout.Stretch,
                Location = new Point(0, 0),
                ReaderSerialNumber = "00000000-0000-0000-0000-000000000000",
                Visible = true,
                Enabled = true
            };

        this.Controls.Add(control);
    }
    catch (Exception)
    {
        throw;
    }
}

private void FrmCapture_Load(object sender, EventArgs e)
{
    this.Location = new Point(400, 180);

    if (enrollControl == null)
    {
        CreateDPControl(enrollControl);
    }
}

private void EnrolControl_OnReaderDisconnected(object control, string ReaderSerialNumber, int finger)
{
    MessageBox.Show("Fingerprint reader is not connected. Connect fingerprint reader.");
    return;
}

private void EnrollControl_OnEnroll(object control, int fingerMask, DPFP.Template temp, DPFP.Gui.EventHandlerStatus eventHandlerStatus)
{
    template = temp;
}

使用 done 捕获正在工作,但我无法获得 OnEnroll 事件(“捕获完成”)。

提前致谢。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    在将其添加到 Controls 集合之前,您可以像这样附加处理程序。

     control.OnReaderDisconnect += EnrolControl_OnReaderDisconnected;
    

    C# 使用 += 运算符将处理程序绑定到事件,并使用 -= 取消挂钩。

    【讨论】:

    • 谢谢,但我不确定我是否正确,在此之前我尝试将事件添加到设计器中,例如“this.enrollControl.OnEnroll += new System.EventHandler(this.EnrollControl_OnEnroll);”但我得到一个带有错误消息的红色下划线 EnrollControl_OnEnroll 没有重载匹配委托事件处理程序
    • 一件事是您可能没有像在 VB 中那样通过句柄绑定事件。另一种可能性是端口中的一些错误,因此您没有收到它。
    • 是的,由于您的处理程序未确认委托的类型,因此该错误是预期的。在文档中查看 OnEnroll 的委托是什么样的。
    • '公共事件_OnEnroll OnEnroll;' '公共委托无效_OnEnroll(对象控制,int FingerMask,模板模板,参考EventHandlerStatus EventHandlerStatus);'这些是我在 metadate 中找到的代表
    • 尝试这样做:enrollControl.OnEnroll += this.EnrollControl_OnEnroll; 您不能也不应该将其视为EventHandler,因为此_OnError 与整个 .net 框架中使用的事件模式不匹配。
    猜你喜欢
    • 2011-11-29
    • 2012-10-29
    • 2018-07-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2015-11-17
    相关资源
    最近更新 更多