Делегаты и события?

Этот вопрос связан с c#.The сценарием, то, что, когда я нажимаю кнопку, операции как чтение Файла, Манипулирование данными и дамп файла будут, произошел. После завершения каждой операции я обновлю состояние (т.е., завершенное чтение Файла, завершенное манипулирование данными) в маркировке, которая находится в UI (ФОРМА-frmTesting)

Событие нажатия кнопки

namespace frmTesting
      {
         public partial class Form1 : Form
         {
              private void button1_Click_1(object sender, EventArgs e)
              {
                 class1 l_objClass1 = new class1();
                  l_objClass1.DoOperation();

              }
          }


       public class class1
       {

            public int DoOperation()
            {
                  ReadTextFile();
                  ParsingData();
                  SaveTextFile();
                  return 0;
            }

            private int ReadTextFile()
            {
               //Read the text File
                return 0;

            }

            private int ParsingData()
            {
               // Data manipulation
                return 0;

            }

            private int SaveTextFile()
            {

               // save the file
               return 0;
            }
       }
   }

Действительно ли возможно при помощи Делегатов и Событий...., если у Вас есть какие-либо запросы, вернитесь назад меня

1
задан Craig Suchanec 23 June 2010 в 12:10
поделиться

2 ответа

Вам придется модифицировать class1 для трансляции событий, которые могут прослушивать другие классы:

public class class1
{
    // Not necessary, but will allow you to add custom EventArgs later
    public delegate void StatusChangedEventHandler(object sender, EventArgs e);

    public event StatusChangedEventHandler FileRead;
    public event StatusChangedEventHandler FileParsed;
    public event StatusChangedEventHandler FileSaved;

    public int DoOperation()    
    {    
        ReadTextFile();    
        ParsingData();    
        SaveTextFile();    
        return 0;    
    }    

    private int ReadTextFile()    
    {    
        //Read the text File
        OnFileRead(EventArgs.Empty);   
        return 0;
    }    

    private int ParsingData()    
    {    
        // Data manipulation
        OnFileParsed(EventArgs.Empty);
        return 0;       
    }    

    private int SaveTextFile()    
    {      
        // save the file
        OnFileSaved(EventArgs.Empty);
        return 0;    
    }

    protected virtual void OnFileRead(EventArgs e)
    {
        if(FileRead != null)
            FileRead(this, e);
    }

    protected virtual void OnFileParsed(EventArgs e)
    {
        if(FileParsed != null)
            FileParsed(this, e);
    }

    protected virtual void OnFileSaved(EventArgs e)
    {
        if(FileSaved != null)
            FileSaved(this, e);
    }
}

А затем пусть ваша форма прослушивает эти события и соответствующим образом изменяет свою метку:

public partial class Form1 : Form 
{ 
    private void button1_Click_1(object sender, EventArgs e) 
    { 
        class1 l_objClass1 = new class1();

        l_objClass1.FileRead += 
            delegate { lblStatus.Text = "File Read..."; };

        l_objClass1.FileParsed += 
            delegate { lblStatus.Text = "File Parsed..."; };

        l_objClass1.FileSaved += 
            delegate { lblStatus.Text = "File Saved..."; };

        l_objClass1.DoOperation(); 
    } 
} 
2
ответ дан 2 September 2019 в 23:34
поделиться

Короткий ответ - да. Вы добавляете события в class1 и добавляете обработчики в Form1 с соответствующей логикой. Ниже приведен пример того, как это сделать

public partial class Form1 : Form
    {


        private void button1_Click_1(object sender, EventArgs e)
        {
            class1 obj = new class1();
            obj.FileReadingComplete += HandleFileReadingComplete;
            obj.DataManipulationComplete += HandleDataManipulationComplete;

            obj.DoOperation();

            obj.FileReadingComplete -= HandleFileReadingComplete;
            obj.DataManipulationComplete -= HandleDataManipulationComplete;

        }

        private void HandleFileReadingComplete(object sender, EventArgs args){ 
            //code here
        }

        private void HandleDataManipulationComplete(object sender, EventArgs args)
        {
            //code here
        }

    }


    public class class1
    {

        public event EventHandler FileReadingComplete;
        public event EventHandler DataManipulationComplete;

        public int DoOperation()
        {
            ReadTextFile();
        OnFileReadingComplete();
        ParsingData();
        OnDataManipulationComplete();
        SaveTextFile();
        return 0;
        }

        private int ReadTextFile()
        {
            //Read the text File
            return 0;

        }

        private int ParsingData()
        {
            // Data manipulation
            return 0;

        }

        private int SaveTextFile()
        {

            // save the file
            return 0;
        }

        public void OnFileReadingComplete()
        {
            EventHandler handler = FileReadingComplete;

            if (handler != null) {
                handler(this, EventArgs.Empty);
            }
        }

        public void OnDataManipulationComplete()
        {
            EventHandler handler = DataManipulationComplete;

            if (handler != null) {
                handler(this, EventArgs.Empty);
            }
        }
    }
0
ответ дан 2 September 2019 в 23:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: