当前位置: 首页 > 知识库问答 >
问题:

使用c#连接生物识别设备?

曹渝
2023-03-14

我试图连接网络应用程序中的生物识别设备。我在windows应用程序中工作正常,但在web中它会抛出错误。

Windows窗体。反恐精英:

int nPort = Convert.ToInt32(textPort.Text);
                        int nPassword = Convert.ToInt32(textPassword.Text);
                        string strIP = ipAddressControl1.IPAddress.ToString();
                        bRet = axFP_CLOCK.SetIPAddress(ref strIP, nPort, nPassword);
                        if(!bRet)
                        {
                            return;
                        }

表单设计器:

((System.ComponentModel.ISupportInitialize)(this.axFP_CLOCK)).BeginInit();
       this.axFP_CLOCK.Enabled = true;
            this.axFP_CLOCK.Location = new System.Drawing.Point(476, 382);
            this.axFP_CLOCK.Name = "axFP_CLOCK";
            this.axFP_CLOCK.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axFP_CLOCK.OcxState")));
            this.axFP_CLOCK.Size = new System.Drawing.Size(100, 50);
            this.axFP_CLOCK.TabIndex = 11;
            this.axFP_CLOCK.Visible = false;
    ((System.ComponentModel.ISupportInitialize)(this.axFP_CLOCK)).EndInit();

同样,我尝试在web应用程序中连接,但它显示错误:Webform1:

 public AxFP_CLOCKLib.AxFP_CLOCK axFP_CLOCK;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bool bRet;
                string ip= "192.168.1.109";
                int nPort = Convert.ToInt32(5005);
                int nPassword = Convert.ToInt32(0);
                axFP_CLOCK = new AxFP_CLOCKLib.AxFP_CLOCK();
                bRet = axFP_CLOCK.SetIPAddress(ref ip, nPort, nPassword);
                if (!bRet)
                {
                    Response.Write("success");
                }

                else
                {
                    Response.Write("failure");
                }
            }
        }

它抛出错误作为

无法实例化ActiveX控件“87733ee1-d095-442b-a200-6de90c5c8318”,因为当前线程不在单线程单元中。

动态链接库:

 public virtual bool SetIPAddress(ref string lpszIPAddress, int dwPortNumber, int dwPassWord)
    {
      if (this.ocx == null)
        throw new AxHost.InvalidActiveXStateException(nameof (SetIPAddress), AxHost.ActiveXInvokeKind.MethodInvoke);
      return this.ocx.SetIPAddress(ref lpszIPAddress, dwPortNumber, dwPassWord);
    }

谁能帮我纠正这个错误?

共有2个答案

云令
2023-03-14

您应该在线程中运行您的方法。

像下面这样。

var thr = new Thread(new AxFP_CLOCKLib.AxFP_CLOCK().SetIPAddress(ref ip, nPort, nPassword));
    thr.SetApartmentState(ApartmentState.STA);
    thr.Start();

我不是很确定,但是注释你的页面加载也应该有帮助。

  [STAThread]
protected void Page_Load(object sender, EventArgs e)
{
 // Code Goes here
}

龚俭
2023-03-14

错误消息表示您正在使用的ActiveX控件需要STA(单线程单元)状态。您可以使用Thread设置相应线程的单元状态。SetApartmentState()方法。

假设您已经创建了一个线程,以如下方式包装ActiveX实例:

var thread = new Thread(() => {
    // other running processes inside thread
    Application.Run();
});

然后在使用Start()之前,您应该将该线程的单元状态指定给STA(ApartmentState.STA):

thread.SetApartmentState(ApartmentState.STA);
thread.Start();

这一问题背后的原因是大部分的。NET后台线程(或工作者API)将创建新线程作为多线程单元状态(MTA),而ActiveX控件线程通常以STA模式实例化。

相关问题:

单线程单元-无法实例化ActiveX控件

 类似资料:
  • 我使用生物识别设备已经有一段时间了。我一直能够连接生物识别设备并从中提取数据。但这一次我给了一个非常旧的设备(Pegasus PB-7),它连接到服务器。我只有远程桌面连接和生物识别设备的访问权限。我面临的问题是,远程桌面上已经安装了一个软件,当我提供Ip和端口时,它会在几秒钟内连接到它。但是,当我使用zkemSdk(我一直在使用它连接到其他设备)时,它不会连接,下面的方法会向我返回-7。 SDK

  • 物联网在生物识别系统安全系统中起着至关重要的作用,如指纹系统,语音识别系统,眼睛扫描系统等。 现在,生物识别系统是我们在日常生活中经常遇到的事情。我们总是使用指纹传感器或眼睛扫描系统,取决于组织到组织。 下面来看看指纹扫描系统以及这些系统的工作原理。现在,当一个人将手指放在指纹扫描仪上时,它会扫描指纹并将其视为注册过程的一部分。从该指纹模板中,设备提取与其他特征不同的某些关键特征并将其存储到数据库

  • 问题内容: 我想开发一个基于 语音生物识别 的应用程序。 具体来说,我想开发一个应用程序,该应用程序将记录电话中的语音并确定讲话者。如果同一个人再次呼叫,它将识别语音。像其他生物识别应用程序一样,这里我需要做语音生物识别。是否有任何网址或示例对我有帮助。我搜索了但找不到解决方案。 我想在我的应用程序中实现上述一种FreeSpeech识别。 是否有可能通过使用任何开源做以下事情。 个人记录语音打印,

  • 有没有可能的方法将指纹生物识别设备连接到网站...? 我创建了一个基于网络的ERP系统。根据客户要求,我需要集成指纹记录系统。我的网站是用C#和angular2开发的。 我尝试了很多SDK,但都没有达到预期效果。

  • 我正在使用生物识别库锁定应用程序。一切正常,当我用指纹解锁时,会调用AuthenticationSucceeded()get,设备会从锁屏中导航。然而,如果使用模式解锁,则会调用onAuthenticationSucceeded()get,但导航没有初始化,我被留在锁屏片段上。 编辑:这只影响具有任何设备凭据的API29 编辑2:我也得到了 FragmentNavigator:忽略popBackS

  • 我最近购买了uface 800 ZKTeco生物识别设备,并创建了从该设备中提取考勤日志的应用程序。一切正常,但每当我们通过关闭/打开电源重新启动机器时,我无法连接到机器。我试图从命令提示符ping分配给设备的IP,但无法ping,它说“请求超时”。我阅读了SDK提供的文档,但没有得到任何解决方案。国王帮我解决这个问题。