powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Правильно ли обрабатываю данные на форме из другого потока.
7 сообщений из 7, страница 1 из 1
Правильно ли обрабатываю данные на форме из другого потока.
    #38781135
maxim111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не программист, пишу различную мелочь для автоматизации повседневных задач на работе.
Знаю, что из "другого" потока можно менять значения control'ов через делегаты. С Action связывался ради интересе. Код рабочий, но смузает то, что Action используется дважды. Поправьте если косячнул.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
		private void btn_Click(object sender, EventArgs e)
		{
		var err = new ErrorProvider();
		//Выводим сообщение об ошибке
		err.SetError(btn,"Ошибка");
		// В другом потоке гасим сообщение через 5 сек.
		var myTask= new Task(new Action(() =>
			{
				Thread.Sleep(5000);
				this.BeginInvoke(new Action(() => err.Clear()));
			}));
		myTask.Start();
		}
...
Рейтинг: 0 / 0
Правильно ли обрабатываю данные на форме из другого потока.
    #38781839
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Нормально работает и без Invoke
Код: c#
1.
2.
3.
4.
5.
var myTask= new Task(new Action(() =>
			{
				Thread.Sleep(5000);
				err.Clear());
			}));



Но по-модному надо так

Код: c#
1.
2.
3.
4.
  Task.Factory.StartNew(() => {
                Thread.Sleep(5000);
                err.Clear(); 
            });
...
Рейтинг: 0 / 0
Правильно ли обрабатываю данные на форме из другого потока.
    #38781865
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если .Net 4.5, то можно ещё так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
		private async void btn_Click(object sender, EventArgs e)
		{
		var err = new ErrorProvider();
		//Выводим сообщение об ошибке
		err.SetError(btn,"Ошибка");
		// В другом потоке гасим сообщение через 5 сек.
		await Task.Delay(5000);
		err.Clear();
		}



Cat2Нормально работает и без Invoke
Для небольшого приложения можно, но для крупной системы не рекомендую - последовательность вызовов (обновлений пользовательского интерфейса) станет непредсказуемой.
...
Рейтинг: 0 / 0
Правильно ли обрабатываю данные на форме из другого потока.
    #38781910
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ilya81,

И чем, по Вашему, Invoke поможет? Просто интересно
...
Рейтинг: 0 / 0
Правильно ли обрабатываю данные на форме из другого потока.
    #38781924
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ilya81,

И чем, по Вашему, Invoke поможет? Просто интересно

Можно определить момент завершения обновления элемента пользовательского интерфейса. Если одно сообщение убрать, то какая разница, а вот если приложение побольше со сложным пользовательским интерфейсом (или может таким стать со временем), то появляется возможность управлять тем, в какой последовательности произойдёт обновление нескольких элементов пользовательского интерфейса.
...
Рейтинг: 0 / 0
Правильно ли обрабатываю данные на форме из другого потока.
    #38782006
maxim111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2Но по-модному надо так

Код: c#
1.
2.
3.
4.
  Task.Factory.StartNew(() => {
                Thread.Sleep(5000);
                err.Clear(); 
            });


Недопустимая операция в нескольких потоках.
...
Рейтинг: 0 / 0
Правильно ли обрабатываю данные на форме из другого потока.
    #38782026
maxim111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Ilya81]Если .Net 4.5, то можно ещё так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
		private async void btn_Click(object sender, EventArgs e)
		{
		var err = new ErrorProvider();
		//Выводим сообщение об ошибке
		err.SetError(btn,"Ошибка");
		// В другом потоке гасим сообщение через 5 сек.
		await Task.Delay(5000);
		err.Clear();
		}


Форма виснет на 5 секунд, и только потом очищает ErrorProvider
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Правильно ли обрабатываю данные на форме из другого потока.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]