Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [c#] Ereditare un evento o renderlo pubblico?

    Salve ragazzi, mi stavo costruendo una classe personalizzata di un player multimediale.
    Siccome funziona tramite un clock esterno, vorrei che fosse pubblico l'evento della classe MediaClock "CurrentTimeInvalidated" che mi permette di fare delle azioni mentre scorre il player.

    Ovviamente nella classe dichiaro il mio oggetto mediaclock... il mio oggetto mediatimeline... e aggancio tutto al MediaPlayer così:


    Classe PlayerAudio (quella che mi sto costruendo)
    codice:
    // Credo una timeline agganciata al clock del riproduttore
                    player = new MediaPlayer();
                    mtl = new MediaTimeline(new Uri(@pathdir));
                    clock = mtl.CreateClock();
                    clock.Controller.Pause();
                    player.Clock = clock;
    
                    //Imposto il volume al massimo (double da 0 a 1)
                    player.Volume = 1;
    Il tutto va bene, tranne che mi serve "esportare" in modo pubblico l'evento CurrentTimeInvalidated della Classe MediaClock, in modo che poi posso richiamarlo da fuori tipo..
    codice:
    PlayerAudio obj = new PlayerAudio();
    
    /* codice di caricamento file */
    
    obj.CurrentTimeInvalidated += new EventHandler(funzionedievento);
    come faccio a rendere pubblico l'evento di MediaClock?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Sinceramente non ho capito quale sia la classe MediaClock !
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    mi pare sia di system.Media.Animation.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Se non lo sai tu...in ogni caso non mi sembra una cosa difficile, guarda questo semplice esempio che ti ho fatto. Hai un'evento della Classe2 da rendere pubblico e la Classe2 è istanziata all'interno della Classe1.

    codice:
    public class Class1
    {
    	public event EventoClasse1EventHandler EventoClasse1;
    	public delegate void EventoClasse1EventHandler();
    
    	Classe2 miaClasse;
    	public Class1()
    	{
    		miaClasse = new Classe2();
    		miaClasse.EventoClasse2 += ScatenaEvento;
    	}
    
    	private void ScatenaEvento()
    	{
    		if (EventoClasse1 != null) {
    			EventoClasse1();
    		}
    	}
    
    	private class Classe2
    	{
    		public event EventoClasse2EventHandler EventoClasse2;
    		public delegate void EventoClasse2EventHandler();
    	}
    
    }
    Non l'ho testato....
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Non credo quell'esempio faccia a caso mio.

    MediaTimeline = classe di sistema che mi permette di creare una timeline( storyboard )
    MediaClock = orologio di conteggio (diverrà il motore della timeline)
    MediaPlayer = il player multimediale.

    Cosa faccio?
    creo un oggetto MediaTimeline aprendo il file multimediale (tramite uri).
    MediaTimeline contiene una funzione "create clock" che restituisce un oggetto MediaClock

    quindi:
    codice:
    MediaTimeline mtl = new MediaTimeline(new Uri(pathdelfile));
    MediaClock clock = mtl.CreateClock();
    Così facendo lego l'orologio alla storyboard.

    Adesso, la Classe MediaPlayer o la controlli automaticamente (play, stop ecc tramite l'oggetto MediaPlayer) oppure tramite un Clock esterno (nel mio caso).

    quindi:
    codice:
    MediaPlayer player = new MediaPlayer();
    player.Clock = clock;
    ok ora ho tutto, posso usare l'evento "CurrentTimeInvalidated" dell'oggetto MediaClock per eseguire un azione a ogni tick..

    Ora.. questo funziona bene se dichiaro tutto nella window principale, ma dovendo trasferire tutto su una mia classe custom fila tutto liscio finché non ho pensato.. si ma come posso richiamare da fuori l'evento CurrentTimeInvalidated (appartenente a MediaClock)?

    A questo punto penso ci voglia una sorta di "crea collegamento" per rendere pubblico l'evento CurrentTimeInvalidated della Classe MediaClock.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.