Если у вас возникла задача сделать метод, который будет выполнять долгую операцию, по окончании, которой надо сделать обработку результата и вынести это в отдельный класс, то очевидно вам придется подумать как сделать в этом классе событие, которое будет срабатывать во внешнем классе по окончании выполнения длинной операции. Для этого вам понадобится добавить 2-е строки в класс с длинной операцией:

				
					    class Candle
    {
        public delegate void Loaded(Candle c);
        public event Loaded Load_Comleted;
        
        ... ... ...        

        public void Load()
        {
           Task t = Task.Run(() =>
           {
            // Long operation
            ... ... ...
               Load_Comleted(this);
           });
        }

				
			

Во внешнем классе надо создать экземпляр сервисного класса, добавить обработчик события Load_Completed и вызвать долгий метод:

				
					                Candle c = new Candle(symbol, type, interval, procent);
                c.Load_Comleted += Candle_Loaded;
                c.Load();
				
			

Ну и в заключении надо реализовать сам обработчик завершения длинной операции, функцию Candle_Loaded:

				
					        void Candle_Loaded(Candle c)
        {
            Invoke(new Action(() =>
            {
                ... ... ...
            }));
        }
				
			
Событие для класса в C# и взаимодействие потоков
Tagged on:

Leave a Reply

Your email address will not be published. Required fields are marked *