【问题标题】:MagneticStripeReader.GetDefaultAsync(); returns nullMagneticStripeReader.GetDefaultAsync();返回空
【发布时间】:2016-01-01 07:57:40
【问题描述】:

我有一个 USB 连接的 MSR 阅读器,我正在尝试使用 here 中证明的示例代码来获取它。这工作正常,但问题是当我将相同的代码添加到我的应用程序时它不起作用。 GetDefaultAsync 返回 null。

private static MagneticStripeReader _reader = null;

public static async void StartRead()
{
    if (await CreateDefaultMagneticStripeReaderObject())
    {
        ....
    }
}

private static async Task<bool> CreateDefaultMagneticStripeReaderObject()
{
    if (_reader == null)
    {
        _reader = await MagneticStripeReader.GetDefaultAsync();
        if (_reader == null)
            return false;
    }
    return true;
}

我的代码和上面一样,与示例非常相似,但它不起作用。我还添加了 pointOfService 的设备功能。所以事实并非如此。

【问题讨论】:

  • 根据documentation,当找不到设备或拒绝访问现有设备时返回null
  • 但是设备在那里。示例应用运行良好....
  • 不知何故,如果我在异步 void 方法中进行调用,它可以工作,但在静态方法中不起作用......
  • 如果不看整个代码,就很难说哪里出了问题。我不知道你为什么成功了static

标签: c# windows windows-runtime windows-8.1 windows-10


【解决方案1】:

确保读卡器处于 HID 模式而不是键盘模拟模式。这是我的问题之一。

这样做真的很不靠谱。 MagTek 在他们的网站上有一个 ActiveX 控件来帮助我们……因为 ActiveX 很糟糕,你只能将它与 InternetExplorer 一起使用(它甚至不能与 Edge 一起使用。)

在 IE 中访问:https://www.magtek.com/changemode/

在弹出时启用活动 X,您可以从隐藏更改为键盘并返回。

【讨论】:

    【解决方案2】:

    我处于完全相同的情况,我花了最后 5 个小时,终于知道发生了什么。您在 Package.appxmanifest 中缺少一项功能

    'pointOfService' 是您想要包含的功能。此功能未显示在 UI 中,因此我无法找到损坏的项目与 Microsoft 的示例项目之间的任何区别。您无法使用 UI 添加该功能。您必须通过修改 XML 文件手动添加它。

    微软的示例项目也有 https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/MagneticStripeReader/cs/Package.appxmanifest#L53

    【讨论】:

      猜你喜欢
      • 2018-12-23
      • 2021-07-07
      • 2013-09-30
      • 2021-08-23
      • 2013-04-07
      • 2018-05-21
      • 2020-11-05
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多