c#表单应用程序标签不更新

本文关键字:更新 标签 应用程序 表单 | 更新日期: 2023-09-27 18:10:49

大家好,这是我向stackoverflow提出的第一个问题,很抱歉我的英语不好。我找了一个星期也没找到解决办法。我正在做一个使用射频识别天线和标签的项目。机器读取标签并产生标签id,如bcbc0000或abab1111…每个id指向一个独特的产品,如衬衫,裤子等。这个程序是一个产品计数器。我的表单应用程序使用这个id与产品的匹配并对它们进行计数。当程序获得衬衫id时,我想在读取时增加表单上的"衬衫计数标签"。我写了2个不同的程序,都没有更新标签。

my codes:

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();

在ontagsreporting()函数中我做了一些控制,重要的部分是

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,它会显示,但在下一行标签不会改变。谢谢你的帮助:)

c#表单应用程序标签不更新

System.Windows.Forms.Timer代替System.Timers.Timer可以帮助你。

System.Timers.Timer在非ui线程中触发事件,所以你不应该在事件处理程序中直接访问UI控件

似乎需要封送对UI线程的调用。

label1.BeginInvoke(new Action(() => label1.Text = "Text Updated"));