c# - 从 NFC-Tag-Reader 事件处理程序更新 UI 非常慢

标签 c# winforms nfc

我有一个 ACR122U NFC 阅读器,我可以在其中读取 MiFare UltraLight NFC 标签。我为我的读者下载了一个框架。但是当调用事件处理程序时,GUI 的更新非常缓慢。

我在线程编程和事件处理方面经验不多。也许我的问题的解决方案很简单。

然而,它只更新 UpdateInterface() 方法中的“逐个标签”,并且一次全部更新一个。我可以看到每个标签都消失了。所以UI的更新很慢。

我想这与读者类在后台调用的(硬件)事件有关。

该程序通常可以运行,只是速度很慢。

private void StartMonitor()
{
        //Function called when starting the Windows Forms Application
        IMonitorFactory monitorfactory = MonitorFactory.Instance;
        monitor = monitorfactory.Create(SCardScope.System);
        monitor.Start(ReaderNames[0]);
        monitor.StatusChanged += Monitor_StatusChanged;
}

private void Monitor_StatusChanged(object sender, StatusChangeEventArgs e)
{
        strPassportNo = "";
        strPassportNo = lPassportNumberNo.Text;

        if (e.NewState.ToString().ToLower().Contains("empty".ToLower()) == true)
        {
            //Interface should be deleted all by once now as no NFC tag is on the reader.
            UpdateInterface();
        }
}

private void UpdateInterface()
{
        if (InvokeRequired)
        {
            this.BeginInvoke(new Action(() =>
            {
                lPassportNumberNo.Text = "";
                lPassengerName.Text = "";
                lPax.Text = "";
                lTableNo.Text = "";
                lRoomNo.Text = "";
                pbTables.Hide();
                pbPasspic.Hide();
                this.BackgroundImage = BackgroundWelcome;
            }));
        }
        else
        {
            lPassportNumberNo.Text = "";
            lPassengerName.Text = "";
            lPax.Text = "";
            lTableNo.Text = "";
            lRoomNo.Text = "";
            pbTables.Hide();
            pbPasspic.Hide();
            this.BackgroundImage = BackgroundWelcome;
        }
}

预期的输出应该是 UI 的性能比实际快很多。或者至少其中包含数据的标签应该立即出现和消失。

最佳答案

不确定这实际上是什么:this.BackgroundImage = BackgroundWelcome; 但真的有必要每次都分配这样的静态数据吗?

此外,我认为您的更新事件的频率不会太高 - 屏幕上的信息应该是人类可读的,因此它绝对只是在读取整个标签后所需的所有数据的一次更新。如果每个标签都有很多读取事件 - 然后将它们全部存储到临时列表中并在读取端更新表单(整个标签)。 当我说“标签”时,我指的是整个 mifare 卡内容。

关于c# - 从 NFC-Tag-Reader 事件处理程序更新 UI 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54269111/

相关文章:

android - 部分 NFC 手机无法读取标签

c# - 为什么一些元组列表是排序的而不是其他的?

c# - 删除最少数量的国际象棋骑士,这样剩下的骑士就不会威胁到另一个骑士

c# - 文档到 .jpg 转换器

android - 屏幕锁定时为 NFC 标签供电

Android 检查是否支持 NFC 的 SIM 卡或普通 SIM 卡

c# - 我如何写入文本文件并从文本文件读回字典<string,List<string>>?

javascript - 从文件系统在 webbrowser 控件中加载 jQuery

c# - 当另一个关闭时显示最小化的形式

c# - BackgroundWorker 的 RunWorkerCompleted 被触发两次