Таймер и прогресс бар...
От: Леонид  
Дата: 12.05.05 14:12
Оценка:
Доброе время суток

Есть формочка, на ней кнопУчка, жму на неё — вызывается длииииительный процесс.
На форме есть прогресс бар. Нужно что бы он во время этого процесса бегал (просто от, извиняюсь, балды — т.е. к самому процессу не привязан.)
Я попытался реализовать сиё чудо через таймер. К сожалению событие таймера не отрабатываются Где грабли порылись?

    private void timerProgressBar_Tick(object sender, System.EventArgs e)
        {
            int nPrgValue=this.prbExportStatus.Value+prbExportStatus.Step;
            if(nPrgValue>=this.prbExportStatus.Maximum)
               nPrgValue=0;
            prbExportStatus.Value=nPrgValue;
            this.prbExportStatus.Refresh();
        }

    .....
    timerProgressBar.Start();
    
    //длиииииииительный процесс

    timerProgressBar.Stop();
    .....
... << RSDN@Home 1.1.4 beta 3 rev. 185>>

13.05.05 15:55: Перенесено модератором из '.NET' — AndrewVK
---
С ув. Леонид
Re: Таймер и прогресс бар...
От: Avos Беларусь  
Дата: 12.05.05 14:16
Оценка:
Здравствуйте, Леонид, Вы писали:


Л> timerProgressBar.Start();


Л> //длиииииииительный процесс


Л> timerProgressBar.Stop();

Л> .....

вот в этом длительном процессе необхдоимо делать так, чтобы обрабатывались сообщения на форме.
а лучше всего вынести в отдельныя поток
Re[2]: вдогонку: Таймер и прогресс бар...
От: Avos Беларусь  
Дата: 12.05.05 14:21
Оценка:
Здравствуйте, Avos, Вы писали:

A>Здравствуйте, Леонид, Вы писали:



Л>> timerProgressBar.Start();


Л>> //длиииииииительный процесс


Л>> timerProgressBar.Stop();

Л>> .....

A>вот в этом длительном процессе необхдоимо делать так, чтобы обрабатывались сообщения на форме.

в частности, можно попробовать Application.DoEvents

A>а лучше всего вынести в отдельныя поток
Re[2]: Таймер и прогресс бар...
От: Леонид  
Дата: 12.05.05 14:24
Оценка:
Здравствуйте, Avos, Вы писали:

A>Здравствуйте, Леонид, Вы писали:



Л>> timerProgressBar.Start();


Л>> //длиииииииительный процесс


Л>> timerProgressBar.Stop();

Л>> .....

A>вот в этом длительном процессе необхдоимо делать так, чтобы обрабатывались сообщения на форме.

A>а лучше всего вынести в отдельныя поток

Что в подразумеваете под "необхдоимо делать так, чтобы обрабатывались сообщения на форме"?
В формочку периодически выводится статус.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
---
С ув. Леонид
Re[3]: Таймер и прогресс бар...
От: Avos Беларусь  
Дата: 12.05.05 14:31
Оценка: +3
Здравствуйте, Леонид, Вы писали:

A>>вот в этом длительном процессе необхдоимо делать так, чтобы обрабатывались сообщения на форме.


Л> Что в подразумеваете под "необхдоимо делать так, чтобы обрабатывались сообщения на форме"?


пока выполняется длительный процесс, форма, в обработчике события которой и происходит рекомый процесс, не может обрабатывать никакие другие собятия, в том числе и тик таймера. Поэтому в данной ситуации существует два выхода:
1. заставлять форму время от времени обрабатывать собятия, для чего в теле длительного процесса (может, это цикл?) необходимо вызывать Application.DoEvents время от времени (здесь)
2. Вынести длительный процесс в отдельный поток, который не будет "останавливать" форму на длительное время.

вот в таком вот аксепте.
Re[4]: Таймер и прогресс бар...
От: Леонид  
Дата: 12.05.05 14:52
Оценка:
Здравствуйте, Avos, Вы писали:

A>>>вот в этом длительном процессе необхдоимо делать так, чтобы обрабатывались сообщения на форме.


Л>> Что в подразумеваете под "необхдоимо делать так, чтобы обрабатывались сообщения на форме"?


A>пока выполняется длительный процесс, форма, в обработчике события которой и происходит рекомый процесс, не может обрабатывать никакие другие собятия, в том числе и тик таймера. Поэтому в данной ситуации существует два выхода:

A>1. заставлять форму время от времени обрабатывать собятия, для чего в теле длительного процесса (может, это цикл?) необходимо вызывать Application.DoEvents время от времени (здесь)
A>2. Вынести длительный процесс в отдельный поток, который не будет "останавливать" форму на длительное время.

A>вот в таком вот аксепте.

A>

Вроде прояснилось спасибо.
Еще вопрос, а System.Threading.Timer можно юзать для этих целей? я попытался вот так: (только TimerCallback создаваться не захотелЪ)

public void TimerMethod(object pExport)
{
((frmExport)pExport).StatusBarRefresh();
}
public void StatusBarRefresh()
{

if(this.prbExportStatus.Visible==false)
this.prbExportStatus.Visible=true;
int nPrgValue=this.prbExportStatus.Value+prbExportStatus.Step;
if(nPrgValue>=this.prbExportStatus.Maximum)
nPrgValue=0;
prbExportStatus.Value=nPrgValue;
this.prbExportStatus.Refresh();
}

....
System.Threading.Timer pTimer=new System.Threading.Timer(
new System.Threading.TimerCallback(this.StatusBarRefresh),
null,
TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(5)
);
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
---
С ув. Леонид
Re: Таймер и прогресс бар...
От: Nikolkos  
Дата: 12.05.05 17:11
Оценка:
Здравствуйте, Леонид, Вы писали:

Л> Доброе время суток


Л> Есть формочка, на ней кнопУчка, жму на неё — вызывается длииииительный процесс.

Л> На форме есть прогресс бар. Нужно что бы он во время этого процесса бегал (просто от, извиняюсь, балды — т.е. к самому процессу не привязан.)


Читаем здесь
Автор(ы): Крис Селлз (Chris Sells)
Дата: 05.06.2003
В статье рассматривается использование многопоточности в приложениях Windows Forms на примере отображения хода длительной операции с использованием асинхронного делегата для запуска рабочего потока и метода Invoke для главной формы.
.
Re: Таймер и прогресс бар...
От: D3D  
Дата: 16.05.05 07:09
Оценка:
Здравствуйте, Леонид, Вы писали:


Л> Доброе время суток


Л> Есть формочка, на ней кнопУчка, жму на неё — вызывается длииииительный процесс.

Л> На форме есть прогресс бар. Нужно что бы он во время этого процесса бегал (просто от, извиняюсь, балды — т.е. к самому процессу не привязан.)
Л> Я попытался реализовать сиё чудо через таймер. К сожалению событие таймера не отрабатываются Где грабли порылись?

Л>
Л>    private void timerProgressBar_Tick(object sender, System.EventArgs e)
Л>        {
Л>            int nPrgValue=this.prbExportStatus.Value+prbExportStatus.Step;
Л>            if(nPrgValue>=this.prbExportStatus.Maximum)
Л>               nPrgValue=0;
Л>            prbExportStatus.Value=nPrgValue;
Л>            this.prbExportStatus.Refresh();
Л>        }

Л>    .....
Л>    timerProgressBar.Start();
    
Л>    //длиииииииительный процесс


Л>    timerProgressBar.Stop();
Л>    .....
    
Л>



Я делал через потоки, передаешь в потоковую функцию указатель на свой прогресс и в потоковой функции реализушь свой длительный процесс, который и будет контролировать твой прогрессjavascript:AddTag(' ','')
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.