Есть формочка, на ней кнопУчка, жму на неё — вызывается длииииительный процесс.
На форме есть прогресс бар. Нужно что бы он во время этого процесса бегал (просто от, извиняюсь, балды — т.е. к самому процессу не привязан.)
Я попытался реализовать сиё чудо через таймер. К сожалению событие таймера не отрабатываются Где грабли порылись?
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
Здравствуйте, Avos, Вы писали:
A>Здравствуйте, Леонид, Вы писали:
Л>> timerProgressBar.Start();
Л>> //длиииииииительный процесс
Л>> timerProgressBar.Stop(); Л>> .....
A>вот в этом длительном процессе необхдоимо делать так, чтобы обрабатывались сообщения на форме.
в частности, можно попробовать Application.DoEvents
A>а лучше всего вынести в отдельныя поток
Здравствуйте, Avos, Вы писали:
A>Здравствуйте, Леонид, Вы писали:
Л>> timerProgressBar.Start();
Л>> //длиииииииительный процесс
Л>> timerProgressBar.Stop(); Л>> .....
A>вот в этом длительном процессе необхдоимо делать так, чтобы обрабатывались сообщения на форме. A>а лучше всего вынести в отдельныя поток
Что в подразумеваете под "необхдоимо делать так, чтобы обрабатывались сообщения на форме"?
В формочку периодически выводится статус.
Здравствуйте, Леонид, Вы писали:
A>>вот в этом длительном процессе необхдоимо делать так, чтобы обрабатывались сообщения на форме.
Л> Что в подразумеваете под "необхдоимо делать так, чтобы обрабатывались сообщения на форме"?
пока выполняется длительный процесс, форма, в обработчике события которой и происходит рекомый процесс, не может обрабатывать никакие другие собятия, в том числе и тик таймера. Поэтому в данной ситуации существует два выхода:
1. заставлять форму время от времени обрабатывать собятия, для чего в теле длительного процесса (может, это цикл?) необходимо вызывать Application.DoEvents время от времени (здесь)
2. Вынести длительный процесс в отдельный поток, который не будет "останавливать" форму на длительное время.
Здравствуйте, 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)
);
Здравствуйте, Леонид, Вы писали:
Л> Доброе время суток
Л> Есть формочка, на ней кнопУчка, жму на неё — вызывается длииииительный процесс. Л> На форме есть прогресс бар. Нужно что бы он во время этого процесса бегал (просто от, извиняюсь, балды — т.е. к самому процессу не привязан.)
Л> Доброе время суток
Л> Есть формочка, на ней кнопУчка, жму на неё — вызывается длииииительный процесс. Л> На форме есть прогресс бар. Нужно что бы он во время этого процесса бегал (просто от, извиняюсь, балды — т.е. к самому процессу не привязан.) Л> Я попытался реализовать сиё чудо через таймер. К сожалению событие таймера не отрабатываются Где грабли порылись?
Л>
Я делал через потоки, передаешь в потоковую функцию указатель на свой прогресс и в потоковой функции реализушь свой длительный процесс, который и будет контролировать твой прогрессjavascript:AddTag(' ','')