none
Delegate mit Parameter RRS feed

  • Frage

  • Hi,

    ich nutze delegates z.B. so:

    private delegate void delSetPhoto();
    private void setPhoto()
    {
        if (!imgPhoto.Dispatcher.CheckAccess())
        {
            Dispatcher.Invoke(new delSetPhoto(setPhoto));
        }
        else
        {
          ...
        }
    }

    Nun habe ich aber eine Methode mit Parameter und finde nicht heraus, wie ich den Delegaten schreibe.
    Hier ein nicht funktionierendes Beispiel:

    private delegate void delSetPhotoToImage(Bitmap bitmap);
    private void setPhotoToImage(Bitmap bitmap)
    {
        if (!imgPhoto.Dispatcher.CheckAccess())
        {
            Dispatcher.Invoke(new delSetPhotoToImage(setPhotoToImage));
        }
        else
        {
           ...
        }
    }

    Wie muss es richtig aussehen, damit die Parameter richtig übertragen werden?

    Frank


    www.energiewende-mach-ich-selbst.de


    • Bearbeitet frank me Freitag, 19. Dezember 2014 13:34
    Freitag, 19. Dezember 2014 13:34

Antworten

Alle Antworten

  • Delegates werden wie folgt erstellt:

    public delegate int Do(int i); //Global definition
    
    	public class B {
    // Diese Methode entspricht dem Delegaten "Do"
    		private int _Do(int n) {
    			Console.WriteLine (n);
    			return n;
    		}
    
    		private void TestM(Do tsk) {
    			tsk(5); //Aufrufen des Delegaten
    		}
    
    		public void StartTest() { 
    //Delegaten aus der Instanz erstellen
    			Do dlg = this._Do; //Kein _Do(...); !!
    			this.TestM(dlg);
    		}
    	}
    Somit ist ein Delegat quasi nur eine Art versprechen, dass die Methode einen bestimmten Rückgabewert hat und bestimmte Parameter hat. Eine Art "Interface" für Methoden, wenn man es umgangssprachlich sagen will.

    © 2015 Thomas Roskop

    Freitag, 19. Dezember 2014 13:41
  • Hallo Frank,
    was genau funktioniert denn nicht? Grundsätzlich hast du den Delegaten richtig deklariert. Die sehen immer aus wie Methoden ohne Körper, nur mit delegate davor stehend.

    Compilerfehler dürfte es bei deinem Code nicht geben. Ich vermute aber mal, dass du nicht weißt, wie man der setPhotoToImage-Methode im Delegaten, innerhalb der Invoke-Methode Parameter übergeben soll. Das geht einfach über eine Überladung der Invoke-Methode:

    Dispatcher.Invoke(new delSetPhotoToImage(setPhotoToImage), bitmap);
    
    Du kannst dort beliebig Parameter anhängen, diese werden dann an den angegebenen Delegaten weiter gereicht.


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert frank me Freitag, 19. Dezember 2014 14:24
    Freitag, 19. Dezember 2014 13:44
    Moderator
  • Ja genau, ich wusste nicht wie ich den Parameter übergebe. Jetzt hab' ich's!

    DANKE! :-)


    www.energiewende-mach-ich-selbst.de

    Freitag, 19. Dezember 2014 14:25