Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Gerd199
4 / 4 / 3
Регистрация: 06.03.2014
Сообщений: 781
#1

Завершение работы программы - C#

17.02.2015, 14:42. Просмотров 952. Ответов 13
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
           new Action(() =>
            {
                while (true)
                {
 
                      txtBoxAns.Text = "f";
 
                      Thread.Sleep(5000);
 
                }
            }).BeginInvoke(null, null);
Как из потока добавить текст? Так программа зависает на ( txtBoxAns.Text = "f"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2015, 14:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Завершение работы программы (C#):

Завершение работы приложения
Здраствуйте, у меня есть приложенько и оно использует selenium web driver,когда...

Корректное завершение работы формы
У меня форма открывает сторонние программы через cmd, и читает текстовые файлы....

Корректное завершение работы explorer.exe
Добрый день. Нужно корректно завершить explorer.exe Process...

Завершение работы приложения при закрытии формы
Всем добрый день! У меня такая проблема, в методе одного класса мне надо...

Завершение программы (уничтожение потоков)
При нажатии на кнопке "старт" у меня создается пол потоков, и кнопка меняет...

Отследить завершение процесса программы
Здравствуйте. Роюсь-роюсь, никак не дороюсь. Запускаю программу, появляется...

13
Sanya_sa
Модератор
686 / 676 / 293
Регистрация: 03.02.2015
Сообщений: 4,241
Записей в блоге: 8
Завершенные тесты: 3
17.02.2015, 14:52 #2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        // Для отрисовки блокировки двигателей
        private void draw_bloc_motors()
        {
            this.Invoke(new Action(() =>
            {
 
                pictureBox_main_control.BackgroundImage = ResourcePic.control_main_test;
 
                if (motors_on)
                {
                    
                    // для скорости
                    if (!in_point && start_OK)
                        pictureBox_main_control.Image = lng.speed_D_red;
                    else
                        pictureBox_main_control.Image = null;
                        
                }
                else
                    pictureBox_main_control.Image = ResourcePic.red_;
            
            }));
        }
Может вот так попробуете)
0
Gerd199
4 / 4 / 3
Регистрация: 06.03.2014
Сообщений: 781
17.02.2015, 14:56  [ТС] #3
Хелп
0
Sanya_sa
Модератор
686 / 676 / 293
Регистрация: 03.02.2015
Сообщений: 4,241
Записей в блоге: 8
Завершенные тесты: 3
17.02.2015, 16:02 #4
Gerd199, Специально для вас! Работае 100%. Всётаки рекомендую разобраться самому, хотябы по моему коду.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace read_file
{
    public partial class Form1 : Form
    {
        
        // поток
        private System.Threading.Thread work;
 
        // событие
        public event EventHandler ev;
       
        // конструктор формы
        public Form1()
        {
            InitializeComponent();
            ev += Form1_ev;
              
        }
 
        void Form1_ev(object sender, EventArgs e)
        {
            this.Invoke(new Action(() =>
            {
            button_READ.Text += "f";
            }));
        }
 
        //
        void func()
        {
                while (true)
                {
 
                    System.Threading.Thread.Sleep(1000);
                    if (ev != null) ev(this, EventArgs.Empty);
                }
        }
 
 
        // Клик по кнопки читать
        private void button_READ_Click(object sender, EventArgs e)
        {
            // Зпуск потока
            work = new System.Threading.Thread(func);
            work.IsBackground = true;
            work.Start();  
        }
    }
 
}
0
Gerd199
4 / 4 / 3
Регистрация: 06.03.2014
Сообщений: 781
17.02.2015, 23:18  [ТС] #5
Не работает...
От таких кодов мозги на викрень у меня...

Form1_ev - вовсе лишнее, так ка не нужно при открытии формы добавлять текст до нажатия кнопки...

Добавлено через 3 минуты
Как сделать так, чтобы исполнять код каждые пять секунд. Так, чтобы при задержке в цикле не зависала программа и из исполняемого кода можно было бы добавить текс в текстовое поле...

Добавлено через 2 минуты
Вот, хороший рабочий вариант. Единственно из него нельзя заменить или добавить текст в текстовое поле.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
        void site_aut_Click(object sender, EventArgs e)
        {
 new Action(() =>
            {
                while (true)
                {
 
                      txtBoxAns.Text = "f";
 
                      Thread.Sleep(5000);
 
                }
            }).BeginInvoke(null, null);
 
}
0
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
18.02.2015, 01:19 #6
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        void site_aut_Click(object sender, EventArgs e)
        {
 new Action(() =>
            {
                while (true)
                {
 
                      txtBoxAns.Text += "f";
 
                      Thread.Sleep(5000);
 
                }
            }).BeginInvoke(null, null);
хотя б видно будет что работает
0
Gerd199
4 / 4 / 3
Регистрация: 06.03.2014
Сообщений: 781
18.02.2015, 08:39  [ТС] #7
В смысле?
Программа крашится на txtBoxAns.Text = "f";, то есть не удается добавить текст в текстовое поле.
Если
txtBoxAns.Text за пределами данного цикла, за new Action(() =>, тогда все ок, работает. Но мне та нужно, чтобы внутри было...

Добавлено через 11 минут
Хелп
0
insite2012
Модератор
Эксперт .NET
4792 / 3751 / 1081
Регистрация: 12.10.2013
Сообщений: 10,990
Записей в блоге: 2
18.02.2015, 08:54 #8
Цитата Сообщение от Gerd199 Посмотреть сообщение
Хелп
Gerd199, а в чем, собственно, сама проблема-то? Вы можете четко и ясно рассказать, что за задачу вы пытаетесь реализовать, как и что должно работать? Из всех предыдущих постов это не совсем понятно...
0
Gerd199
4 / 4 / 3
Регистрация: 06.03.2014
Сообщений: 781
18.02.2015, 09:40  [ТС] #9
Сейчас мне просто нужно,чтобы некий код выполнялся по интервалу. ЧТобы программа не висла при задержке, если такова имеется.

На два поста выше - рабочий код, но. В нем формируется некий текст который нужно добавить, вывести его. Просто добавить его в текстовое поле... Программа крашится если это пытаться сделать внутри потока Action
0
off
89 / 89 / 44
Регистрация: 20.04.2008
Сообщений: 326
Завершенные тесты: 3
18.02.2015, 10:35 #10
Изобретаем велосипед
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
new Action(() =>
            {
                while (true)
                {
 
                      this.Invoke(new Action(() =>
                     {
                          txtBoxAns.Text += "f";
                       }));
 
                      Thread.Sleep(5000);
 
                }
            }).BeginInvoke(null, null);
Работает?
0
Sanya_sa
Модератор
686 / 676 / 293
Регистрация: 03.02.2015
Сообщений: 4,241
Записей в блоге: 8
Завершенные тесты: 3
18.02.2015, 11:06 #11
Так?

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace add_text
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            // подписка на событие
            ev += Form1_ev;
        }
 
        // для выводимого текста
        string text_val = null;
 
        // поток
        private System.Threading.Thread work;
 
        // событие вызываем из соседнего потока
        public event EventHandler ev;
 
        // старт потока
        void start_thread()
        {
            work = new System.Threading.Thread(func);
            work.IsBackground = true;
            work.Start();  
        }
 
        // то что будем выполнять в другом потоке
        void func()
        {
            while (true)
            {
                // пауза для демонстации того что нет тормозав 
                System.Threading.Thread.Sleep(1000);
 
                // событие вызываем в данном потоке
                if (ev != null) ev(this, EventArgs.Empty);
            }
        }
 
        // вызвано из соседнего потока
        void Form1_ev(object sender, EventArgs e)
        {
            this.Invoke(new Action(() =>
            {
                richTextBox_out_DATA.Text +=  "\n" + text_val;
            }));
        }
 
        // запускаем поток
        private void button_start_Click(object sender, EventArgs e)
        {
            start_thread();
        }
 
        // обновим текст
        private void button_ref_text_Click(object sender, EventArgs e)
        {
            // меняем текс
            text_val = textBox_ch_DATA.Text;
        }
    }
}
Добавлено через 1 минуту
ВОТ ЕЩЕ ПРОЕКТ И СКРИН РАБОТЫ!

Не загрузилось еще раз пробую
1
Миниатюры
Завершение работы программы  
Вложения
Тип файла: zip test_ADD_TEXT.zip (53.8 Кб, 0 просмотров)
Gerd199
4 / 4 / 3
Регистрация: 06.03.2014
Сообщений: 781
18.02.2015, 11:49  [ТС] #12
Form1_ev - что за функция?

Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
// старт потока
        void start_thread()
        {
            work = new System.Threading.Thread(func);
            work.IsBackground = true;
            work.Start();
        }
Это для чего? Разве так нельзя сделать?
C#
1
2
3
4
5
6
7
8
       void site_aut_Click(object sender, EventArgs e)
        {
 
            work = new System.Threading.Thread(func);
            work.IsBackground = true;
            work.Start();
 
        }
Добавлено через 1 минуту
Где вызывается button_ref_text_Click?

Добавлено через 12 минут
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
48
49
50
51
52
53
54
55
56
  public partial class Form1 : Form
    {
 
        // для выводимого текста
        string text_val = null;
 
        // поток
        private System.Threading.Thread work;
 
        // событие вызываем из соседнего потока
        public event EventHandler ev;
 
        public Form1() {
 
            // The InitializeComponent() call is required for Windows Forms designer support.
            InitializeComponent();
 
            // подписка на событие
            ev += Form1Load;
 
        }
 
        void Form1Load(object sender, EventArgs e)
        {
            this.Invoke(new Action(() =>{
 
                txtBoxAns.Text = text_val;
 
            }));
        }
 
        // то что будем выполнять в другом потоке
        void func()
        {
            while (true)
            {
                text_val = text_val + "фывфыn";
 
                // пауза для демонстации того что нет тормозав 
                System.Threading.Thread.Sleep(1000);
 
                // событие вызываем в данном потоке
                if (ev != null) ev(this, EventArgs.Empty);
            }
        }
 
 
        void site_aut_Click(object sender, EventArgs e){
 
            work = new System.Threading.Thread(func);
            work.IsBackground = true;
            work.Start();
 
        }
 
    }
Спс. У меня так вот работает...
0
Sanya_sa
Модератор
686 / 676 / 293
Регистрация: 03.02.2015
Сообщений: 4,241
Записей в блоге: 8
Завершенные тесты: 3
18.02.2015, 11:57 #13
"В нем формируется некий текст который нужно добавить, вывести его. Просто добавить его в текстовое поле... "
Gerd199, Вы этого хотели?


"Form1_ev - что за функция?"
Читайте делигаты и события в C# (в 2-х словах не обьяснить) и пока не разбиретесь в многопоточность не лезте. (совет)


"Это для чего? Разве так нельзя сделать?"
Конечно можно! Только если Вам нужно быдет вызвать функцию в другом месте кода таки будите по 3 строчки копипастить?

Да и ваще это только пример накидан на скорую руку! Что бы показать механизм. По большому счету этот код нужно еще кучей проверок обвешать и сделать коректное завершение потока иначе возможны ошибки.

Почитайте про события и делигаты.
0
Gerd199
4 / 4 / 3
Регистрация: 06.03.2014
Сообщений: 781
18.02.2015, 12:06  [ТС] #14
"Gerd199, Вы этого хотели? "
-Да

Вопрос не по теме, боюсь долго не найдут тему(если создам на тего тему в заброшенном подфоруме).

Если в адресной строке браузера вводить домен, тогда получиться следующее. Запрос идет на сервер на котором зарегистрирован домен, а уже от туда перенаправление на сервер правооблодателя данного домена?

Я хочу спросить, если подгружать страницу через айпи, а не через домен. Будет ли быстрей доходить запрос до конечного сервера?
0
18.02.2015, 12:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2015, 12:06
Привет! Вот еще темы с решениями:

Завершение программы из-за переполнения буфера WebBrowser
завершение программы из-за переполнения буфера WebBrowser на c# сам код...

Как вывести время работы программы ПОСЛЕ завершения работы progressBar?
У меня почему-то сначала выводится время в MessageBox, а затем уже завершает...

Реакция на завершение работы windows
Такой вопрос, как можно сделать чтобы если началось завершение работы windows...

Завершение работы кода после соытия
Существует класс с событием: public class Hearer { private Hearer() { } ...


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

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

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