wątek a odswiezanie okna.

0

Witam mam problem, mianowicie mam metodę animation() która zwiększa wartość alfa do 60 a następnie ją zmniejsza i tak w kółko, za każdym razem kiedy wartość "alfa" się zwiększy o 1,lub zmniejszy wywoływana jest metoda display która powinna odświeżyć całe okno. Jeśli nie jest odpalany nowy wątek wtedy wszystko działa dobrze, niestety kiedy go uruchamiam sam musze klikać na okno które się wyświetla żeby cokolwiek się odświeżyło.

Jak zrobić że mimo że zaczynam nowy wątek to okno i tak jest odświeżane.
(Biblioteka którą wykorzystuje do generowania grafiki to openGL)
kawałek kodu

       static int alfa = 0;
        public static void animation()
        {
            int i;
            while (true)
            {
                for (i = 0; i < 60; i++)
                {
                    alfa++;
                    display();
                }
                for (i = 60; i > 0; i--)
                {
                    alfa--;
                    display();
                }
            }
        }

        static void display()
        {
            GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
            GL.glClear(GL.GL_COLOR_BUFFER_BIT);
            GL.glColor3f(1.0f, 0.0f, 0.0f);

            GL.glPushMatrix();

            //GL.glTranslatef(0.0f, 0.0f, -200.0f);
            GL.glRotatef(alfa, 0.0f, 1.0f, 0.0f);

            GL.glBegin(GL.GL_POLYGON);
            GL.glVertex3d(0, 0, 0.0);
            GL.glVertex3d(0, 1, 0.0);
            GL.glVertex3d(1, 1, 0.0);
            GL.glVertex3d(1, 0, 0.0);
            GL.glEnd();

            GL.glPopMatrix();

            GL.glFlush();
            Glut.glutSwapBuffers();

        }

 static void Main(string[] args)
        {
            Glut.glutInit();
            Glut.glutInitDisplayMode(Glut.GLUT_DOUBLE | Glut.GLUT_RGB);

            Glut.glutInitWindowSize(400, 400);

            Glut.glutCreateWindow("Przekształcenia");
            Glut.glutDisplayFunc(display);

            new Thread(new ThreadStart(startSerial)).Start();
            //jeśli wpisze po prostu startSerial(); bez rozpoczynania nowego wątku wszystko jest ok
            //jeśli zaczne wątek okno nie jest odświeżane
            Glut.glutMainLoop();
        }

jest to program troche od czapy, ale chodzi mi o samą idee działania bo musze wykorzystać ją gdzie indziej, także wolał bym uniknąć porad typu "to się da zrobić inaczej", lub "ten program jest bezsensu"

Pozdrawiam i dzięki za pomoc

0

Znaczy z tego co zrozumiałem, to ta funkcja ma migać tym okienkiem, zmieniając alfa, a funkcja display() ma odświeżyć okienko, ale kiedy tę funkcję od migania odpalisz w innym wątku (nie głównym) to nie działa? Cóż, może to być wina tego, zę wątki poboczne nie powinny grzebać w elementach gui. Może wywołąć metodę display w wątku głównym? Powinno być coś w stylu Invoke dostępne, żeby wywołać jakiś kod w wątku głónym, może to pomoże?

e:
możę http://compsci.ca/v3/viewtopic.php?t=15353 pomoże ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1