Windows.Forms

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Подскажите по этому коду, при нажатие на кнопку генерится число и выводится в textBox, если ставлю цикл больше то число выводится последнее пока не закончится цикл, как сделать что бы оно отображалось всегда
Код:
startButton.Click+= delegate(object sender, System.EventArgs e){
    for(int i=0; i <=1; i++)
    {
        System.Threading.Thread.Sleep(1000);
        Random rnd = new Random();
        project.Variables["global"].Value = rnd.Next(1,100).ToString();
        textBox.Text=project.Variables["global"].Value;
    }
};
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
UP. Куплю решение
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 983
Благодарностей
817
Баллы
113
Что значит — «всегда»? То есть, пока цикл идёт, например, от 1 до 100, то должны показываться случайные числа из интервала?
3 98 5 75 2 5465 2 23 4 5 3 2 24 5 34 34 23 22... 99 100? Или как?
 

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 311
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

Значит что форма виснет, и не удивительно.
Цикл работает в 1 потоке с формой, и блокирует ее отрисовку.
Нужно запустить цикл в отдельном потоке.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
то должны показываться случайные числа из интервала?
3 98 5 75 2 5465 2 23 4 5 3 2 24 5 34 34 23 22... 99 100?
да
Значит что форма виснет, и не удивительно.
Цикл работает в 1 потоке с формой, и блокирует ее отрисовку.
Нужно запустить цикл в отдельном потоке.
не могу допетрить как это сделать
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Так можно создать поток:
Код:
 System.Threading.Tasks.Task.Run(() =>
            {
                // Your code.
            })
Методом Invoke нужно обновлять UI из другого потока:
Код:
  Invoke(new Action(() =>
            {
                // Your code.
            }));
 
  • Спасибо
Реакции: ssXXXss

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Так можно создать поток:
Код:
 System.Threading.Tasks.Task.Run(() =>
            {
                // Your code.
            })
Методом Invoke нужно обновлять UI из другого потока:
Код:
  Invoke(new Action(() =>
            {
                // Your code.
            }));
Форма однопоточная, ей надо принять все значения с глобальных что есть в остальных проектах, то есть запускаем 5 проектов, и в каждом проекте присутствует одна и таже глобальная, вот мне надо что бы при запуске формы это значение глобальной передавалось в форму а не в 5-ть логов, что бы я не скакал по логам как та "блоха", а всё мог видеть только в одной форме, в вижуал студио попробывал через лэйбэл, привязал к нему тик и тик отображается как надо, ну как тут в зенно привязать хер его знаю
Код:
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.timer1.Enabled = true;
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            this.label1.Text = DateTime.Now.ToString("HH:mm:ss");
        }
    }
и форма не зависает, как на подобию этому в зенно привязать к лэйбэлу глобальную, что бы и форма была открыта и значение менялось
 
Последнее редактирование:

Nick

Client
Регистрация
22.07.2014
Сообщения
1 983
Благодарностей
817
Баллы
113
Можете погуглить "C# BackgroundWorker пример", там должен быть внятный образец. Могу вам сам написать за двадцатку (знаю, что дóрого, но дешевле мне неинтересно).
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Можете погуглить "C# BackgroundWorker пример", там должен быть внятный образец. Могу вам сам написать за двадцатку (знаю, что дóрого, но дешевле мне неинтересно).
Спасибо за совет, ну честно уже пол гугла перечитал, в програмировании может и не понимаю но обвернуть вот эти строки
Код:
{
    label.Text = DateTime.Now.ToString("HH:mm:ss");
}

F.ShowDialog();
в вечный цикл при открытой форме что бы часы тикали или рандом число выходило , дороговато реально снипеты стали стоить
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)