Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环中的c#EventHandler不';t火_C#_.net_Winforms_Events - Fatal编程技术网

循环中的c#EventHandler不';t火

循环中的c#EventHandler不';t火,c#,.net,winforms,events,C#,.net,Winforms,Events,我仍然是一个处理事件的noob,使用eventhandler更新表单时遇到问题。 我有一个窗体,它是类StartPage中的一个计数器,这个计数器应该显示参数“bookQuantity”的值,该值是在另一个类调用的Gauge中计算的。我在while循环中订阅了eventHadler,但在调试过程中,似乎从未使用过函数Counter_Tick,它传递了CounterEvent,并且没有启动Counter_Tick函数。 下面是代码(简化): 由于缺乏可靠地再现问题的好方法,因此无法确定。但是在您发

我仍然是一个处理事件的noob,使用eventhandler更新表单时遇到问题。 我有一个窗体,它是类StartPage中的一个计数器,这个计数器应该显示参数“bookQuantity”的值,该值是在另一个类调用的Gauge中计算的。我在while循环中订阅了eventHadler,但在调试过程中,似乎从未使用过函数Counter_Tick,它传递了CounterEvent,并且没有启动Counter_Tick函数。 下面是代码(简化):


由于缺乏可靠地再现问题的好方法,因此无法确定。但是在您发布的代码中,没有任何引发
CounterEvent
事件的代码。为什么您希望调用任何处理程序?代码还有其他问题,但我猜你没有费心去真正提出这个事件,这可以解释你看到了什么。FWIW:在循环中订阅事件而不取消订阅该事件不太可能产生您想要的效果;我们希望这只是一个错误的尝试来追踪这个问题。你的代码似乎离基础很远。我建议你问一个更一般的问题,在这个问题中,你描述了你试图实现的更高层次的目标。我怀疑上述情况是否接近一个真正好的解决方案。当然,我不能肯定,因为从你的问题来看,代码应该做什么还不是很清楚。我没有看到反事件曾经在哪里出现过。你是对的。这是一个微不足道的错误。
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace zeus
{
    public class Gauge : IGauge
    {
        private IObjectsToPrint objectsToPrint = new ObjectsToPrint();
        private IOutputMessages outputMessages = new OutputMessages();
        private decimal bookQuantity;
        private float counter = Parameters.GetcounterToPrint;
        public EventArgs e = null;

        public delegate void CounterHandler(Gauge g, EventArgs e);

        private StartPage target;
        private EventHandler CounterEvent;

        public Gauge()
        {
            List<Books> ListToPrint = Parameters.GetList;
            bookQuantity = Parameters.FirstQuantity;
        }

        private long theCounter;

        public long TheCounter
        {
            get
            {
                return theCounter;
            }
            set
            {
                theCounter = value;
                OnCounterChanged(this.theCounter);
            }
        }

        public async void GaugeCalculator()
        {
            var ItemList = Parameters.GetList;
            bookQuantity = Parameters.FirstQuantity;
            Parameters._counterToPrint = (long)bookQuantity;
            // CounterEvent += new EventHandler(Counter_Tick);

            if (Parameters.Getgaugespeedvalue == 0)
            {
                //do nothing as we are not running
            }
            else
            {
                foreach (var elem in ItemList)
                {
                    bookQuantity = Parameters.getQuantity(elem);

                    while (bookQuantity > 0)
                    {
                        await Task.Delay(TimeSpan.FromMilliseconds(20000 / (Parameters.Getgaugespeedvalue + 1)));
                        CounterEvent += new EventHandler(Counter_Tick);
                        bookQuantity--;
                    }
                    if (bookQuantity == 0)
                        outputMessages.PrintFinished(Parameters.getTitle(elem));
                    // MessageBox.Show("hello");
                }
            }
        }

        public delegate void CounterTickerHandler(long newCount);

        public event CounterTickerHandler TheCounterChanged;

        public void Counter_Tick(object sender, EventArgs e)
        {
            TheCounter = (long)bookQuantity;
        }

        protected void OnCounterChanged(long newCount)
        {
            if (TheCounterChanged != null)
            {
                TheCounterChanged(newCount);
            }
        }
    }
}
namespace zeus
{
    public partial class StartPage : zeus.ParentForm
    {
        public StartPage()
        {
            InitializeComponent();
            this.gauge = new Gauge();
            this.gauge.TheCounterChanged += new Gauge.CounterTickerHandler(CounterHasChanged);
        }
    }
}