Alles um die Fenster aktualisierung



  • Ich benutzte VC++ 2008 Express
    1. Wie kann ich bei Änderung der Fenstertransparenz (Opacity) die änderungen "übernehmen", die Form wird immer wieder zu 100 % Sichtbar. Refresh, Update bringt keine Lösung

    2. Wie kann meine Form noch ansprechbar bleiben, bei langen Berechnungen / einer sehr langen Schleife.

    3. Hatte da mal eine "Lösung" HUST, die aber eher gegenteiliges bewirkt hat, die Form hatte das Bild zwar immer aktuell, aber nichts drum herum war mehr Ansprechbar.

    4. Hatte mal was mit while(GetMessage)SendMessage oder so, aber da wusste ich nicht recht mit umzugehen. Alles ist fertig nur dieses Einfrieren des Programmfensters nervt.

    5. Habe schon ein weiters Programm gebastelt, dass eine Datei überprüft aber das hat 2 Nachteile:

    a. Das Hauptprogramm wird dadurch um einiges Verlangsamt, kommt auf die aktuallisierungsgeschwindigkeit an

    b. Wenn beide Versuch drauf zu zugreifen verrecken beide 😮

    Ich hoffe ihr helft mir in Punkto 1 und 2



  • Nicht alle Fragen beantwortet, aber egal:

    1. FWenn die Berechnungen zu lange dauern und einfrieren erscheint das Fenster automatisch. (Das ist eine "natürliche Abwehreaktion").
    2. System.ComponentModel.Backgroundworker
    3 & 4. Es gibt eine einfache Regel dazu in Form-Klassen: Finger weg davon, wenn du mit .Net programmierst (also verwaltete Fensterklassen).



  • Mit dem Backworker hab ichs mal in nem andern Prog versucht, da war das aber nicht gut zu gebrachen, aber bei diesem kann ichs mal versuchen, daran hab ich nicht gedacht. Werde ich jetzt sofort umschreiben.
    Uno Momento



  • 1. Versteh ich nicht ganz, weil es wie ein MIX aus zwei aussagen zu sein scheint

    a. es wird nicht durchs einfrieren sichtbar

    b. Das Ändern der Transparenz von 80% auf 50% (Form) hat immer das Resultat 100% ???



  • Ah ja jetzt weiß ich wieder warum ich nicht den BckWorker benutzt habe...

    Ich will während des Arbeitsprozesses in eine Datei schreiben, und auf dei Form zugreifen (Progress Bar Value ändern), das macht er aber nicht.



  • Ich gehe mal davon aus du gibt für 50% Transparenz this->Opacity = 0.5f an und nicht this->Opacity = 50.

    Tim06TR schrieb:

    1. Versteh ich nicht ganz, weil es wie ein MIX aus zwei aussagen zu sein scheint

    a. es wird nicht durchs einfrieren sichtbar

    b. Das Ändern der Transparenz von 80% auf 50% (Form) hat immer das Resultat 100% ???

    Ich kann mir das auch nicht normal erklären. Aus dem Kontext der anderen Fragen hatte ich das fälschlicherweise so verstanden und vermutet:

    Die Form ist zu einem Zeitpunkt semitransparent. Danach wird eine lange und komplizerte Berechnung (im UI-Thread) gestartet und das Fenster friert ein. Bei einem normalen Fenster wird dann bei mir alles vom Betriebsystem mit einem weißen Schleier überlegt und der Cursor ändert sich. Dabei hatte ich angenommen, dass dadurch die Tranzparenz dekativiert wird und alles (heller) angezeigt wird.

    Tim06TR schrieb:

    Ah ja jetzt weiß ich wieder warum ich nicht den BckWorker benutzt habe...

    Ich will während des Arbeitsprozesses in eine Datei schreiben, und auf dei Form zugreifen (Progress Bar Value ändern), das macht er aber nicht.

    Dazu benutzt man ProcessChange des Backgroundworkers. In der Backgoundworkerfunktion kann dann der Prozentsatz eingestellt werden, was ein Ereignis im UI-Thread auslöst, welches die Fortschrittsanzeige erfolgreich verändert. (Hier steht es genauer http://msdn.microsoft.com/de-de/library/ms171728.aspx). Herzlich Wilkommen im Multi-Threading.



  • Tim06TR schrieb:

    a. Das Hauptprogramm wird dadurch um einiges Verlangsamt, kommt auf die aktuallisierungsgeschwindigkeit an

    versuch mal Dein Glück mit FileSystemWatcher - http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher.aspx

    Tim06TR schrieb:

    b. Wenn beide Versuch drauf zu zugreifen verrecken beide 😮

    eine Fehlermeldung oder wie sie verrecken wäre durchaus hilfreich



  • @mogel -> Übergangslösung, wollte ich eigentlich nicht fortführen
    (btw: Zugriffsverletzung, warum ist klar aber egal)

    @Rhombicosidodecahedron

    Die Transparenz hat nichts mit der Rechnugn zu tun lassen wir das einfach mal aus
    dem anbetracht raus. Die Form hat zur erstellzeit eine Transparenz (80%) wenn ich sie IN DER LAUFZEIT ändere wird 100 raus, egal was ich mache.

    Multy Threading, ah ok dann wird das wohl mein nächstes Lern Thema 🙂
    Ich schau mir den Link später an, ich mach jetzt etwss "Programmier Pause"


Anmelden zum Antworten