我有一个 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/