Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 2
Регистрация: 13.07.2010
Сообщений: 71
1

Не выводит данные во время работы программа

26.07.2010, 14:09. Просмотров 1169. Ответов 12
Метки нет (Все метки)

При работе программы не выводятся результаты , а как тока код весь отработал так выводится все сразу.
Как сделать чтобы выводились результаты во время работы программы? Допустим надо чтобы выводилось по 1 единицы а не все 99 сразу под конец.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            String s;
            for (long i = 0; i <= 99; i++)
            {
                Thread.Sleep(99);
                textBox1.Text += "1";
            }
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.07.2010, 14:09
Ответы с готовыми решениями:

Программа , которая выводит время, за которое программа работает
Вообщем, нужно что бы считалось время от начала работы программы, и выводилось на экран.

Программа не выводит данные
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt;...

Программа расчитывает время и расстояние и выводит в виде диаграммы.
Есть три самолета(S1,S2,S3) и два города(N и M). Данные о скоростях самолетов и расстоянии между...

Программа выводит неточные данные
Из задания: Написать программу, которая: 1) Может обрабатывать данные группы студентов. 2) Вести...

12
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,842
26.07.2010, 14:13 2
Если я правильно тебя понял, то они у тебя итак выводятся по мере работы программы, просто компьютер работает быстрей, чем тебе надо )
0
2 / 2 / 2
Регистрация: 13.07.2010
Сообщений: 71
26.07.2010, 14:14  [ТС] 3
Во время работы программы Окно Формы Не отвичает А как код отработал оно отвисае6т и выдает результат.
0
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,842
26.07.2010, 14:21 4
А вам как надо? Чтобы все это выводилось постепенно, надо чтобы форма перерисовывалась во время работы вашего цикла, поэтому наряду со слипом, нужно еще вызывать событие перерисовки. ИМХО.
0
2 / 2 / 2
Регистрация: 13.07.2010
Сообщений: 71
26.07.2010, 14:55  [ТС] 5
А как это выглядит это событие перерисовки?
0
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,842
26.07.2010, 15:34 6
C#
1
this.Invalidate();
0
2 / 2 / 2
Регистрация: 13.07.2010
Сообщений: 71
26.07.2010, 16:13  [ТС] 7
что не так ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
          
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            
            for (long i = 0; i <= 99; i++)
            {
                Thread.Sleep(50);
                textBox1.Text += "1";
                this.Invalidate();
            }
           
        }
 
 
 
    }
}
Добавлено через 13 минут
А понел надо
C#
1
2
   this.Invalidate(true);
   this.Update();
однако форма не двигается во время работы как исправить это?
0
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,842
26.07.2010, 16:25 8
мой пример, aka через задний проход:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace WF_InvalidateTheOutput
{
    public partial class Form1 : Form
    {
        bool change = false;
        int count = 0;
        int currenttick = Environment.TickCount;
        int lasttick = Environment.TickCount;
 
        public Form1()
        {
            InitializeComponent();
            Application.Idle += new EventHandler(IdleEH);
        }
 
        void IdleEH(object sender, EventArgs e)
        {
            if (change == true)
            {
                currenttick = Environment.TickCount;
 
                if (count > 100) change = false;
 
                if (change && (currenttick - lasttick) > 100)                
                {
                    lasttick = currenttick;
                    textBox1.Text += "1";
                    textBox1.Invalidate();
                    count++;
                }                
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            change = true;
        }
    }
}
все волшебство в том, что приложение однопоточное, и пока что-то выполняется, ничего другого делать нельзя. поэтому нужно умудриться впихнуть в цикл еще и перерисовку, или наоборот. В данном примере сделал так сказать всевдо цикл.
1
2 / 2 / 2
Регистрация: 13.07.2010
Сообщений: 71
26.07.2010, 17:41  [ТС] 9
А в каких случаях можно перемещать форму, тока когда она находится в состоянии простоя, может есть какой нибуть другой способ , из цикла ? А то как тогда пишут допустим видеоконвектор , он во время работы двигается.
0
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,842
26.07.2010, 17:45 10
не все так просто, почитайте про многопоточные приложения, кроме того для видеоконвертера задача вывода текущего состояния конвертация является второстепенной, поэтому при конвертировании вы и видите, что картинку с частотой 1fps, основной ресурс программы уходит на конвертирование.
Думаю там все реализовано примерно так же.
0
67 / 66 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
26.07.2010, 17:56 11
не нужно ничего перерисовывать,
форма подвисает потому что ты выполняешь какую-то операцию в главном потоке.
C#
1
Thread.Sleep(99);
этим ты заставляешь приостановиться главный поток.

используй дополнительный поток.

подключи
C#
1
using System.Threading;
а хотя он и так у тебя подключен
и далее

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
       private void button1_Click(object sender, EventArgs e)
        {
               new Thread(Work).Start();
        }
 
        private void Work()
        {
            String s;
            for (long i = 0; i <= 99; i++)
            {
                Thread.Sleep(99);
                textBox1.Text += "1";
            }
        }
тем самым ты запускаешь операцию в дополнительном потоке, и она не мешает главному. и всё прорисовывается.

а вообще советую почитать литературу по теме потоков, чтобы разобраться самому
1
2 / 2 / 2
Регистрация: 13.07.2010
Сообщений: 71
26.07.2010, 19:47  [ТС] 12
Invalidate(); отвечает за обновление содержимого формы, а что отвечает за обновление место расположения формы или как можно вогнать программу в состояние простоя во время работы, что-то типо Break; во время цикла. И какими функциями можно перемещать форму на экране.
допустим нажал кнопку и она сдвинулась на определенные заданные координаты ?

Добавлено через 11 минут
как передать 2 потоку данные из 1 а то this.Update(); и textBox1.Text не распознаются в 2 потоке?

Добавлено через 54 минуты
Сделал так но как-то вывод глючит немогу понять почему.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
            Application.Idle += new EventHandler(IdleEH);
        }
        private void IdleEH(object sender, EventArgs e)
        {
            textBox1.Text = s;
           
        }
        
       public  string s;
       private void button1_Click(object sender, EventArgs e)
        {
               new Thread(Work).Start();
        }
 
        private void Work()
        {
            for (long i = 0; i <= 99; i++)
            {
                Thread.Sleep(99);
                s += "1";
            }
        }
    }
}
0
67 / 66 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
26.07.2010, 22:03 13
не надо никому ничего передавать=)
если приложение не слишком мудреное
то можно просто отключить проверку на пересечение потоков.
C#
1
CheckForIllegalCrossThreadCalls = false;
теперь не будет ругаться на то, что ты обратился к элементу не из того потока.
а вообще правильно это делается через делегаты.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
            new Thread(Work).Start();
        }
 
        private void Work()
        {
            for (long i = 0; i <= 99; i++)
            {
                Thread.Sleep(99);
                textBox1.Text += "1";
            }
        }
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2010, 22:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Программа запускается, но не выводит данные
Массивы ми еще не учили поэтому делал розветлением. Когда запускаю програму увожу данные но ответ...

Программа некорректно выводит данные
Помогите пожалуйста, не могу найти ошибку. Программа работает, но вместо того чтобы выводить...

Программа выводит некорректные данные
#include&lt;stdio.h&gt; int main() { char c; int a = 0,b; while (((c = getchar()) !=...

Программа выводит некорректные данные
Option Explicit Sub Zyreial() Dim y As Single, x As Single, b As Single, i As Integer, a As...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.