Προς το περιεχόμενο

C# - Invoke - UserControl - Component


Red_Phantom

Προτεινόμενες αναρτήσεις

Δημοσ.

Προσπαθώ να φτιάξω κάποια standalone objects σε C# - .Net2

 

1) To αντικείμενο δημιουργείται και ενα Τhread παρακολοθει την εσωτερική του κατάσταση.

2) Όταν γίνει κατι ενδιαφέρον γίνεται με την χρήση της Invoke fire ένα event.

 

A) Όταν φτιάχνω ένα αντικείμενο χρησιμοποιώντας σαν base class την UserControl τα πράγματα είναι εύκολα:

 

>
public delegate void ValueChangedEventHandler(object sender,ValueChangedEventArgs arg);

class NewCtk: UserControl
{
   public event ValueChangedEventHandler ValueChangedEvent;

  
   public NewCtk()
   {
      this.HandleCreated+= new EventHandler(HandleCreatedFunc);
      this.Disposed +=new EventHandler(DisposedFunc);
   }

   void DisposedFunc(object sender,EventArgs e)
   {
       th.Abort();
   }
      
   void HandleCreatedFunc(object sender,EventArgs e)
   {
       ts=new ThreadStart(FuncMonitor);
       th=new Thread(ts);
       th.Start();
   }

   public void FuncMonitor()
   {
      //new pd() etc...
       this.Invoke(PingDataAvailableEvent,new Object[]{this,pd});   
   }
}

 

B) Προσπαθώ να κάνω το ίδιο για αντικείμετα που χρησιμοποιούν σαν βασική κλάση την Component. Όμως παρατήρησα ότι δεν υπάρχει κάποια αντίστοιχη συνάρτηση Invoke().

 

Υπάρχει καποιος μηχανισμός σαν την invoke που να λειτουργεί για αντικείμενα τύπου Component?? [\b]

 

Eυχαριστω.

Δημοσ.

Μα είναι λογικό αφού η invoke θα σε γυρίσει στο msg loop του control με το οποίο την καλείς. Αν έχεις απλά ένα component μπορεί να μην υπάρχει καν msg loop (να εκτελείται σε console application). Η λύση (για windows application πάντα) είναι να παρέχεις στo αντικείμενό σου ένα control και με αυτό το control να καλείς την Invoke. Μπορείς για παράδειγμα στον δημιουργό του αντικειμένου σου να περνάς την κύρια φόρμα που τρέχει το πρόγραμμά σου.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...