我试图连接网络应用程序中的生物识别设备。我在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);
}
谁能帮我纠正这个错误?
您应该在线程中运行您的方法。
像下面这样。
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
}
错误消息表示您正在使用的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提供的文档,但没有得到任何解决方案。国王帮我解决这个问题。