Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
18 / 18 / 4
Регистрация: 05.06.2012
Сообщений: 1,020
1

Как сделать, чтобы форма и контролы на ней во время долгих расчётов не зависали?

12.05.2013, 11:31. Показов 3637. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сделать чтобы форма и контролы на ней во время долгих расчётов не зависали?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2013, 11:31
Ответы с готовыми решениями:

Как сделать так чтобы во время долгих расчетов форма не замирала?
Добрый день. Ну в общем то в названии темы и содержится главный вопрос. Как сделать так чтобы во...

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

Как сделать, чтобы форма не брала фокус при клике на ней?
Суть: есть полноэкранное приложение, поверх которого висит моя форма, при любом действии с другими...

Как сделать, чтобы при открытии форма растягивалась во весь экран и расположенные на ней объекты были всегда в зоне видимости?
Такое вообще возможно?

11
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
12.05.2013, 11:55 2
делать расчёты в отдельном потоке не предлагать?
0
2 / 2 / 2
Регистрация: 12.05.2013
Сообщений: 32
12.05.2013, 12:00 3
Цитата Сообщение от pincet Посмотреть сообщение
делать расчёты в отдельном потоке не предлагать?
А как тогда иначе?))
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
12.05.2013, 12:27 4
BackgroundWorker используйте.
0
178 / 178 / 50
Регистрация: 06.01.2013
Сообщений: 392
12.05.2013, 13:51 5
Цитата Сообщение от phantom96 Посмотреть сообщение
BackgroundWorker используйте.
Лучше используйте асинхронный вызов Task, прога на .NET 4.5? Если да то давайте метод я подскажу как сделать. Если не 4.5 то также давайте сделаю но по другому
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
12.05.2013, 15:41 6
А чем воркеры уже не устраивают? Может мне тоже стоит их на таски поменять?)
0
178 / 178 / 50
Регистрация: 06.01.2013
Сообщений: 392
12.05.2013, 16:39 7
Я с воркером пару раз только дело имел, а таск всегда юзаю, вот пример для автора:
Допустим у нас есть метод, выполнение которого занимает время:
C#
1
2
3
4
private void SomeMethod()
        {
            //действия
        }
Вызывается его выполнение так:
C#
1
2
3
4
private void CallingMethod()
        {
            SomeMethod();
        }
Чтобы вызвать этот метод асинхронно (управление перейдет к вызывающему методу почти сразу после вызова, тоесть до окончания) надо изменить сам метод, что довольно просто:
C#
1
2
3
4
5
6
7
private Task SomeMethod()
        {
            return Task.Run(() =>
                {
                    //действия
                });
        }
И теперь вызвать метод:
C#
1
2
3
4
private async void CallingMethod()
        {
            await SomeMethod();
        }
Притом, в вызывающем методе надо добавить async после private, и при вызове поставить ключевое слово await.
Все, метод будет выполняться асинхронно и форма не будет от его действий страдать Просто, не так ли?)
2
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.05.2013, 17:51 8
Воркер лучше тасков для одной задачи.
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
12.05.2013, 21:23 9
Путаете вы меня товарищи. Вот работают у меня 4 асинхронных воркера, которые посылают udp запросы на сервер и обновляют таблицы. Как воркер закончит 1 цикл, он проверит надо ли ему ещё раз всё это сделать и пойдёт на второй заход в случае чего. На таск переделывать?
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.05.2013, 21:41 10
phantom96, если больше воркеров гарантированно не будет - то не надо ничего менять. Если возможно будут добавляться задачи - и для каждой нужен будет воркер, то лучше переделать на задачи.
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
12.05.2013, 23:36 11
У меня есть ещё 3, но они не в цикле...
0
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
25.12.2014, 22:36 12
Цитата Сообщение от MrGladus Посмотреть сообщение
И теперь вызвать метод:
C#
1
2
3
4
private async void CallingMethod()
{
    await SomeMethod();
}
А если нужно, чтоб метод вернул результат из того мира потока и обработал его (например, присвоил какому-то контроллу)?
0
25.12.2014, 22:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2014, 22:36
Помогаю со студенческими работами здесь

Как сделать так, чтобы форма ShowMessage автоматически закрывалась через какое-то время?
как сделать что бы форма ShowMessage автоматически закрывалось через какое то время, и не нужно...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru