ScrollableControl langsam

Danielku15

Erfahrenes Mitglied
Hallo Leute.
Ich arbeite gerade an einem Projekt welches GuitarPro Dateien ausliest, abspielt und darstellt. Funktioniert alles auch soweit ganz gut. Die Darstellung der Noten geschieht über ein ScrollableControl in welches ich alles Zeichne. Beim Abspielen zeichne ich noch zusätzlich einen "Caret" welcher die aktuelle Position visualisiert. Damit man nun auch immer die aktuelle Position sieht, scrolle ich beim Abspielen an die Caret-Position sobald der Caret eine neue Zeile erreicht.
Tablature.cs
C#:
        private void ScrollAsync(Point oPt)
        {
            AutoScrollPosition = oPt;
        }
        private delegate void ScrollInvoker(Point oPt);
        public void ScrollTo(int iX, int iY)
        {
            Point oPt = new Point(-AutoScrollPosition.X, -AutoScrollPosition.Y);
            if(iX >= 0) oPt.X = iX;
            if(iY >= 0) oPt.Y = iY;

            Invoke(new ScrollInvoker(this.ScrollAsync), oPt);
        }

Jedoch ist das ScrollableControl etwas Komplexer aufgebaut als gedacht. Es wird nicht einfach nur die Position geändert sondern Nativ eine ScrollWindowEx aufgerufen. Diese Aktion ist nun so aufwendig dass das Abspielen sich kurze Zeit aufhängt und alles ein wenig Ruckelt.
Gibt es eine Möglichkeit den Scrollbereich performanter zu aktualisieren? Gibt es evtl. eine Alternative zum ScrollableControl?

Ich habe mal ein Build angehängt damit ihr das Problem nachvollziehen könnt.

[EDIT]
Hab das Problem nun Lösen können. Ich hab Invoke einfach durch BeginInvoke ersetzt. War irgendwie logisch, jedoch war mir BeginInvoke noch nicht so geläufig.

Grüße
Daniel
 

Anhänge

  • GpPlayer.Sample.zip
    303,9 KB · Aufrufe: 10
Zuletzt bearbeitet:

Neue Beiträge

Zurück