Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Проблема отображения программы (http://forum.oszone.net/showthread.php?t=106535)

Jonik-Mnimonik 08-05-2008 09:33 797506

Проблема отображения программы
 
Здраствуйте. Помогите пожалуйста решить следующую проблему.
Создал форму в С#. Создал кнопку. При нажатии на кнопку запускается функция в которой есть цикл. В нутри цикла я поставил счётчик который изменяет строку состояния ProgressBar. Дело в том что эта строка состояния изменяется только после того как функция отработала, а мне надо чтобы она изменялась во время работы цикла. Может быть есть какие-нибуть опереаторы которые обновляют главную форму или что-то другое?

Admiral 08-05-2008 13:30 797687

Всё дело в том, что быстродействие не позволяет увидеть/заметить момент срабатывания и функция в цикле быстро отрабатывает. Нужно вносить либо же паузу (для лёгких функций, каким и прогресса нечего городить)
Код:

private void button1_Click(object sender, EventArgs e)
        {
            while (progressBar1.Value < progressBar1.Maximum)
            {
            progressBar1.Value = progressBar1.Value + 10;
            System.Threading.Thread.Sleep(100);
            }
        }

Либо если используется тяжолые функции прогресс и так отобразится.

Jonik-Mnimonik 08-05-2008 14:23 797731

C полосой получилось и без задержки, но вот с Label не получается. Т.е Полоса состояния работает а Label не отображается. И ещё такой вопрос. Как мне сделать так, чтобы при работе цикла я к примеру мог нажать кнопу, которая будет сворачивать программу.
З.Ы. код сворачивания не нужен.

Код:
//в j содержится количество всех строк
f1= new FileStream(fil, FileMode.Open, FileAccess.Read);
int kolp = j;
StreamReader sss = new StreamReader(f1);;
String sss1="";
int o = 0;
float z;
int z1 = 0; ;

while ((sss1 = sss.ReadLine()) != null)
{

sss1 = sss1 + vstavka;
//должна быть Функция хеширования
o++; j--;
if (j % 100== 0)
{
label20.Text = Convert.ToString(o);
label21.Text = Convert.ToString(j);
z = ((o*100)/kolp);
z1= Convert.ToInt32(Math.Ceiling(z));
progressBar2.Value = z1;

}

}
label20.Text = Convert.ToString(o);
label21.Text = Convert.ToString(j);
progressBar2.Value = z1;
f1.Close();

Admiral 08-05-2008 14:32 797738

Ну так, функция не из лёгких, по этому и заметно.

Цикл своё отрабатывает, а в это время никто не запрещает нажать на кнопку. Или сильно программа загружена в момент цикла?

Jonik-Mnimonik 08-05-2008 16:39 797804

Когда цикл идёт, то я нажимаю на кнопку, но анимации её нажатия нет, а кнопка срабатывает только после того как цикл завершиться


Время: 17:16.

Время: 17:16.
© OSzone.net 2001-