Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Event/Delegate for progress bar issue

Event/Delegate for progress bar issue

Scheduled Pinned Locked Moved C#
helpvisual-studiowpfcomannouncement
19 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Lost User

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplicationXXIV
    {
    enum CRType { CR5, CR6 }
    public delegate void ProgressChangeHandler2(int progress, int id);
    public interface iCR
    {
    event ProgressChangeHandler2 ProgressChanged;
    }
    public class CR5 : iCR
    {
    public int SlaveIndex { get; set; }
    public event ProgressChangeHandler2 ProgressChanged;
    public CR5(int slaveIndex)
    {
    SlaveIndex = slaveIndex;
    }
    public int ProcessTagWrite() //(ref byte[] WriteDat, bool isFastProgramMode)
    {
    AttemptWrites();
    return 0;
    }
    private void AttemptWrites()
    {
    for (int i = 0; i < (10); i++)
    {
    RaiseProgressChange(i, SlaveIndex);
    }
    }
    private void RaiseProgressChange(int progress, int id)
    {
    if (ProgressChanged != null) //this is null
    {
    ProgressChanged(progress, id); //not getting here
    }
    }
    }
    class GenericPC
    {
    public object GetPC()
    {
    var cr = Program.GetCR(CRType.CR5, 0);
    cr.ProgressChanged += new ProgressChangeHandler2(updateProgressBar);
    (cr as CR5).ProcessTagWrite();
    return cr;
    }

        private void updateProgressBar(int n, int id)
        {
            Console.WriteLine(String.Format("Progress: {0}\\tid:{1}", n, id));
        }
    }
    class Program
    {
        static void Main(string\[\] args)
        {
            var npc = new GenericPC();
            npc.GetPC();
            Console.ReadKey();
        }
    
        public static iCR GetCR(CRType type, int slaveIndex)
        {
            iCR cr = null;
            switch (type)
            {
                case CRType.CR5:
                    cr = new CR5(slaveIndex);
                    break;
                case CRType.CR6:
                    cr = null; //new CR6(slaveIndex);
                    break;
                default:
                    throw new ArgumentException(string.Format("A CR of type {0} cannot be found", Enum.GetName(typeof(CRType), type)));
            }
            return cr;
        }
    }
    

    }

    First things first; place the cursor on the word ProgressChangeHandler2 and press F2 (or Ctrl-R, Ctrl-R) and rename that to something wit

    M Offline
    M Offline
    MichCl
    wrote on last edited by
    #6

    It seems like the place you're putting the delegate won't work for me since you have it all in one program and I don't. I see that it works, though.

    1 Reply Last reply
    0
    • M MichCl

      Good start. The Cr5_Comm class is missing from that. Good idea for ProgressChangeHandler to lose the 2. If you don't have the iCR_Comm interface, it's like I never made my changes at all.

      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #7

      To use the other interface, the CR5 class would need to inherit from it and implement it.

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;

      namespace ConsoleApplicationXXIV
      {
      enum CRType { CR5, CR6 }
      public delegate void ProgressChangeHandler2(int progress, int id);
      public interface iCRComm
      {
      event ProgressChangeHandler2 ProgressChanged;
      int ReadTag(ref byte[] dataDumpWriteCheck);
      }
      public class CR5 : iCRComm
      {
      public int SlaveIndex { get; set; }
      public event ProgressChangeHandler2 ProgressChanged;
      public CR5(int slaveIndex)
      {
      SlaveIndex = slaveIndex;
      }
      public int ReadTag(ref byte[] dataDumpWriteCheck)
      {
      Console.WriteLine(String.Format("Data: {0}", dataDumpWriteCheck));
      return 0;
      }
      private void RaiseProgressChange(int progress, int id)
      {
      if (ProgressChanged != null) //this is null
      {
      ProgressChanged(progress, id); //not getting here
      }
      }
      }
      class GenericPC
      {
      public iCRComm GetPC()
      {
      var cr = Program.GetCR(CRType.CR5, 0);
      cr.ProgressChanged += new ProgressChangeHandler2(updateProgressBar);
      byte[] b = null;
      cr.ReadTag(ref b);
      return cr;
      }

          private void updateProgressBar(int n, int id)
          {
              Console.WriteLine(String.Format("Progress: {0}\\tid:{1}", n, id));
          }
      }
      class Program
      {
          static void Main(string\[\] args)
          {
              var npc = new GenericPC();
              npc.GetPC();
              Console.ReadKey();
          }
      
          public static iCRComm GetCR(CRType type, int slaveIndex)
          {
              iCRComm cr = null;
              switch (type)
              {
                  case CRType.CR5:
                      cr = new CR5(slaveIndex);
                      break;
                  case CRType.CR6:
                      cr = null; //new CR6(slaveIndex);
                      break;
                  default:
                      throw new ArgumentException(string.Format("A CR of type {0} cannot be found", Enum.GetName(typeof(CRType), type)));
              }
              return cr;
          }
      }
      

      }

      Bastard Programmer from Hell :suss: If you can't read my code, try converting it

      M 1 Reply Last reply
      0
      • L Lost User

        To use the other interface, the CR5 class would need to inherit from it and implement it.

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;

        namespace ConsoleApplicationXXIV
        {
        enum CRType { CR5, CR6 }
        public delegate void ProgressChangeHandler2(int progress, int id);
        public interface iCRComm
        {
        event ProgressChangeHandler2 ProgressChanged;
        int ReadTag(ref byte[] dataDumpWriteCheck);
        }
        public class CR5 : iCRComm
        {
        public int SlaveIndex { get; set; }
        public event ProgressChangeHandler2 ProgressChanged;
        public CR5(int slaveIndex)
        {
        SlaveIndex = slaveIndex;
        }
        public int ReadTag(ref byte[] dataDumpWriteCheck)
        {
        Console.WriteLine(String.Format("Data: {0}", dataDumpWriteCheck));
        return 0;
        }
        private void RaiseProgressChange(int progress, int id)
        {
        if (ProgressChanged != null) //this is null
        {
        ProgressChanged(progress, id); //not getting here
        }
        }
        }
        class GenericPC
        {
        public iCRComm GetPC()
        {
        var cr = Program.GetCR(CRType.CR5, 0);
        cr.ProgressChanged += new ProgressChangeHandler2(updateProgressBar);
        byte[] b = null;
        cr.ReadTag(ref b);
        return cr;
        }

            private void updateProgressBar(int n, int id)
            {
                Console.WriteLine(String.Format("Progress: {0}\\tid:{1}", n, id));
            }
        }
        class Program
        {
            static void Main(string\[\] args)
            {
                var npc = new GenericPC();
                npc.GetPC();
                Console.ReadKey();
            }
        
            public static iCRComm GetCR(CRType type, int slaveIndex)
            {
                iCRComm cr = null;
                switch (type)
                {
                    case CRType.CR5:
                        cr = new CR5(slaveIndex);
                        break;
                    case CRType.CR6:
                        cr = null; //new CR6(slaveIndex);
                        break;
                    default:
                        throw new ArgumentException(string.Format("A CR of type {0} cannot be found", Enum.GetName(typeof(CRType), type)));
                }
                return cr;
            }
        }
        

        }

        Bastard Programmer from Hell :suss: If you can't read my code, try converting it

        M Offline
        M Offline
        MichCl
        wrote on last edited by
        #8

        Can CR5 inherit from both iCR and iCRComm?

        M L 2 Replies Last reply
        0
        • M MichCl

          Can CR5 inherit from both iCR and iCRComm?

          M Offline
          M Offline
          MichCl
          wrote on last edited by
          #9

          Your definition and use of iCRComm is what my iCR interface is. It's still not doing what my iCRComm does. Thanks for helping!!

          1 Reply Last reply
          0
          • M MichCl

            Can CR5 inherit from both iCR and iCRComm?

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #10

            Yes; although I don't see why one wouldn't simply modify the original interface to include the new method. Remember that the factory is there for a good reason.

            Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

            M 1 Reply Last reply
            0
            • L Lost User

              Yes; although I don't see why one wouldn't simply modify the original interface to include the new method. Remember that the factory is there for a good reason.

              Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

              M Offline
              M Offline
              MichCl
              wrote on last edited by
              #11

              Yes, but I have two factories. One for CR5 interface and one for CRComm interface. It may not be obvious from what I posted, but they have very different uses. Generic needs to use CR5 for writes. CR5Comm is used all over the place and definitely isn't the same/can't be condensed into one with CR5. You're changing the use of everything too much for it to be helpful. Maybe we need to go back to the original VS project definitions of everything? I know it's difficult, but it's like that for a reason. Even where you put the delegate doesn't translate to anywhere in my code.

              L 1 Reply Last reply
              0
              • M MichCl

                Yes, but I have two factories. One for CR5 interface and one for CRComm interface. It may not be obvious from what I posted, but they have very different uses. Generic needs to use CR5 for writes. CR5Comm is used all over the place and definitely isn't the same/can't be condensed into one with CR5. You're changing the use of everything too much for it to be helpful. Maybe we need to go back to the original VS project definitions of everything? I know it's difficult, but it's like that for a reason. Even where you put the delegate doesn't translate to anywhere in my code.

                L Offline
                L Offline
                Lost User
                wrote on last edited by
                #12

                MichCl wrote:

                It may not be obvious from what I posted, but they have very different uses.

                I'd expect anything out that factory to behave similar; otherwise you'd be checking whether you're working on a CR5 or a CR6 everywhere in code, making things even more complicated.

                MichCl wrote:

                Even where you put the delegate doesn't translate to anywhere in my code.

                As far as the compiler is concerned, it's located in "some" namespace. As long as it's referenced, it can be used.

                Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                M 1 Reply Last reply
                0
                • L Lost User

                  MichCl wrote:

                  It may not be obvious from what I posted, but they have very different uses.

                  I'd expect anything out that factory to behave similar; otherwise you'd be checking whether you're working on a CR5 or a CR6 everywhere in code, making things even more complicated.

                  MichCl wrote:

                  Even where you put the delegate doesn't translate to anywhere in my code.

                  As far as the compiler is concerned, it's located in "some" namespace. As long as it's referenced, it can be used.

                  Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                  M Offline
                  M Offline
                  MichCl
                  wrote on last edited by
                  #13

                  Like I said. There are two different factories. One for comm, one for crx. I get two different things from them. The fact that I don't have a check for CR5 or CR6, is because my cr factory returns an instance of iCR that is an instance of either cr5 or cr6. When I make a call from my instance of icr that is returned, it will automatically go to the implementation of cr5 or cr6, whichever I instantiated in the factory. I realize the compiler doesn't care about the delegate location and usage, but I do. The structure/fix that you are suggesting doesn't translate even slightly to my code, which is in separate vs projects. I can't put my delegate where you have it, so it's not a fix for my problem. Thanks for the help!

                  L 1 Reply Last reply
                  0
                  • M MichCl

                    Like I said. There are two different factories. One for comm, one for crx. I get two different things from them. The fact that I don't have a check for CR5 or CR6, is because my cr factory returns an instance of iCR that is an instance of either cr5 or cr6. When I make a call from my instance of icr that is returned, it will automatically go to the implementation of cr5 or cr6, whichever I instantiated in the factory. I realize the compiler doesn't care about the delegate location and usage, but I do. The structure/fix that you are suggesting doesn't translate even slightly to my code, which is in separate vs projects. I can't put my delegate where you have it, so it's not a fix for my problem. Thanks for the help!

                    L Offline
                    L Offline
                    Lost User
                    wrote on last edited by
                    #14

                    MichCl wrote:

                    The structure/fix that you are suggesting doesn't translate even slightly to my code, which is in separate vs projects.

                    Aight, can you add in the project names in the original post? Make 'em fake ones if required :)

                    Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                    M 2 Replies Last reply
                    0
                    • L Lost User

                      MichCl wrote:

                      The structure/fix that you are suggesting doesn't translate even slightly to my code, which is in separate vs projects.

                      Aight, can you add in the project names in the original post? Make 'em fake ones if required :)

                      Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                      M Offline
                      M Offline
                      MichCl
                      wrote on last edited by
                      #15

                      Thanks! I updated the original post with vs project names.

                      1 Reply Last reply
                      0
                      • L Lost User

                        MichCl wrote:

                        The structure/fix that you are suggesting doesn't translate even slightly to my code, which is in separate vs projects.

                        Aight, can you add in the project names in the original post? Make 'em fake ones if required :)

                        Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                        M Offline
                        M Offline
                        MichCl
                        wrote on last edited by
                        #16

                        Did you see the changes I made to the original post?

                        L 1 Reply Last reply
                        0
                        • M MichCl

                          Did you see the changes I made to the original post?

                          L Offline
                          L Offline
                          Lost User
                          wrote on last edited by
                          #17

                          I did, but I won't be able to work on it until I am home :)

                          M 1 Reply Last reply
                          0
                          • L Lost User

                            I did, but I won't be able to work on it until I am home :)

                            M Offline
                            M Offline
                            MichCl
                            wrote on last edited by
                            #18

                            Guess what???! I cleaned all of my classes, detached and re-attached references, and it's working now. I guess I had the delegates/events and the interfaces set up correctly after all!!!! I was stepping through and noticed an exception was being thrown so I wasn't getting to my event setup (+/-), so that's why it was null and missing updating the progressBar. :) Thanks for the help!!

                            L 1 Reply Last reply
                            0
                            • M MichCl

                              Guess what???! I cleaned all of my classes, detached and re-attached references, and it's working now. I guess I had the delegates/events and the interfaces set up correctly after all!!!! I was stepping through and noticed an exception was being thrown so I wasn't getting to my event setup (+/-), so that's why it was null and missing updating the progressBar. :) Thanks for the help!!

                              L Offline
                              L Offline
                              Lost User
                              wrote on last edited by
                              #19

                              MichCl wrote:

                              Guess what???! I cleaned all of my classes, detached and re-attached references, and it's working now.

                              Cool!

                              MichCl wrote:

                              Thanks for the help!!

                              You're welcome :)

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups