如何使用ISynchronizeInvoke与设备通信?

时间:2012-03-22 05:34:33

标签: c# asp.net

我有一个指纹扫描仪和它的SDK(品牌:Suprema BioMini USB设备)。 他们为 windows form 应用程序提供了一些示例C#代码。 要使用以下代码段初始化设备,

UFScannerManager ScannerManager;
ScannerManager = new UFScannerManager(this);

这里“this”表示当前窗口表单对象,构造函数需要“ISynchronizeInvoke sysInvoke”参数类型。因此,当传递“this”时,扫描仪可以在Windows窗体应用程序中正确初始化。无需担心ISynchronizeInvoke接口。

现在我需要使用带有c#的ASP.Net实现一个web基础程序,我需要与指纹设备进行通信。因此,在初始化时如何通过传递ISynchronizeInvoke对象来创建ScannerManager对象?

感谢

1 个答案:

答案 0 :(得分:2)

ISynchronizeInvoke接口用于控制委托的同步/异步调用。通常,接口的使用者将在不同的线程上执行某些操作,然后在调用者线程上同步返回结果。

在您的情况下,最有可能的是,UFScannerManager将在Windows窗体的UI线程上进行回调,因此它将其作为参数接受。

我不确定您使用哪种用例迫使您从Web应用程序使用指纹扫描程序。扫描仪将连接在服务器机器上的位置 - 正确吗?因此,当远程客户端计算机必须在服务器计算机附近进行物理操作时才能使用它来控制它的重点是什么。

所有这一切,首先要确定的是,如果您的扫描仪驱动程序API可以在没有UI线程或消息泵的情况下工作。如果可以,那么您可以向API提供自己的ISynchronizeInvoke实现 - 请参阅此处了解一个此类示例实现:http://blogs.msdn.com/b/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx

最有可能的是,这可能不起作用,因为它可能需要带有Windows消息泵的UI线程。在这种情况下,您可能需要构建一个基本上与扫描仪API通信的Windows服务 - 在服务中,您可以创建一个窗体表单以传递给API。 Windows服务可以公开WCF接口(比如命名管道),以便ASP.NET应用程序可以与它通信以控制/读取扫描程序信息。