大家好,这是我对stackoverflow的第一个问题,对不起我的英语。我搜索了一个星期,找不到解决方案。我正在开发一个使用RFID天线和标签的项目。一台机器读取标签并生成标签ID,如bcbc 0000或abab 1111 ......每个id都指向一个独特的产品,如衬衫,裤子等。这个程序是一个产品柜台。我的表单应用程序使用此id与产品的匹配并对其进行计数。当程序获得衬衫ID时,我想在阅读时增加表单上的“衬衫数量标签”。我写了两个不同的程序,都没有更新标签。
我的代码:
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Interval = 2000;
aTimer.Start();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
阅读部分如下;
reader.Connect(SolutionConstants.ReaderHostname);
Settings settings = reader.QueryDefaultSettings();
settings.Report.IncludeFastId = true;
settings.Report.IncludeAntennaPortNumber = true; // WS
settings.Antennas.GetAntenna(1).MaxTransmitPower = true;
settings.Antennas.GetAntenna(1).MaxRxSensitivity = true;
settings.Antennas.GetAntenna(2).MaxTransmitPower = true;
settings.Antennas.GetAntenna(2).MaxRxSensitivity = true;
...... and other settings here....
// Apply the newly modified settings.
reader.ApplySettings(settings);
// Assign the TagsReported event handler.
// This specifies which method to call
// when tags reports are available.
reader.TagsReported += OnTagsReported;
// Start reading.
reader.Start();
tagList.Add(tag.Epc.ToString()); // adds tags to tagList.
计时器功能;
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
for (int i = 0; i < tagList.Count; i++)
{
if (!usedTags.Contains(tagList[i]))
{
//MessageBox.Show("");
label1.Text = "Text Updated.";
//productCounter(tagList);
usedTags.Add(tagList[i]);
}
}
}
一切正常。如果控制,程序会持续。如果我在那里写了一个messageBox,它会显示但是在下一行标签上没有改变。谢谢你的帮助:)
答案 0 :(得分:1)
System.Windows.Forms.Timer
代替System.Timers.Timer
可以帮助您。
System.Timers.Timer
在非UI线程中触发事件,
所以你不应该直接在事件处理程序中访问UI控件。
答案 1 :(得分:0)
好像你需要编组调用UI线程。
label1.BeginInvoke(new Action(() => label1.Text = "Text Updated"));