Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > вызов Form.Resresh() из неосновного потока


Автор: 4ybaka 1.6.2007, 11:08
есть неск потоков рисовальщиков,кот работают со след функцией:
Код

            while (Position != newPosition) {

                curPos.X += changeX;
                curPos.Y += changeY;
                lock (this)
                {
                    Position = curPos;
                }

                Draw();

                Thread.Sleep(100);


где Draw:
Код

            lock (graph)
            {
                graph.DrawImage(bitmap, Position);
            }
            Interlocked.Increment(ref readyThreads);
            while (readyThreads != 0) {
                Thread.Sleep(20);
            }

и есть поток,кот должен после каждого прохода функций рисовальщиков обновляьт форму:
Код

            while (true) {
                if (readyThreads == -1)
                    return;
                if (readyThreads == totalThreads) {
                    form.BeginInvoke(refresh);//resresh - делегат на Form.Resresh()
                    Interlocked.Exchange(ref readyThreads ,0);
                }
                Thread.Sleep(10);
            }

так вот форма перерисовывается только при окончании работы рисовательных потоков,а не после каждого прохода!(хотя коли уж рисовальщики рисуют дальше,значит form.BeginInvoke(refresh) и Interlocked.Exchange(ref readyThreads ,0) точно вызывались....)разве Form.Refresh() не должен сразу обновить всю форму?

Автор: SpaceSpace 1.6.2007, 11:54
легче после каждого прохода рисовальщика напрямую вызывать рефрешь.

может перемудрил ты с потоками?

Автор: 4ybaka 1.6.2007, 12:35
если после каждого прохода посылать,то будет мерцание,это же не DD,кот с неск поверхностями работает....
Цитата

может перемудрил ты с потоками?

может,но вот только почему же он сразу то не вызывает?ведь сказано же "Forces the control to invalidate its client area and immediately redraw itself and any child controls. "

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)