Модераторы: gambit, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Окно ожидания, создание окна ожидания  
:(
    Опции темы
HAL707
Дата 11.8.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 6.9.2007

Репутация: нет
Всего: 4



Привет всем.

Хотелось бы спросить, как правильно создать окно ожидания длительно опрерации главной формы?
То есть есть конструктор главной формы
Код

MainForm()
{
WaitForm.Show() //хотелось бы нечто типа класса WaitForm, который показывает и убирает окно ожидания, когда это нужно

//длительная операция

WaitForm.Close()

}


Кто-то делал нечто подобное?
PM MAIL   Вверх
Bogdan1024
Дата 11.8.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 1
Всего: 13



Думаю тебе просто нужно выполнять длительную операцию в отдельном потоке.


--------------------
user posted image
PM MAIL   Вверх
Raistlin
Дата 11.8.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 19.5.2009

Репутация: нет
Всего: нет



Почитай насчет BackgroundWorker и System.Threading.Thread, готовых примеров с подобными окнами, прогрессбарами и т.п. очень много smile
PM MAIL   Вверх
HAL707
Дата 12.8.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 6.9.2007

Репутация: нет
Всего: 4



Если бы все было так просто...
Создаю форму в отдельном потоке. Форма не показывается.
Делаю так:
Код

 protected override void OnLoad(EventArgs e)
{
            new Thread(new ThreadStart
                (
                delegate
                {
                    frmWait wf = new frmWait();
                    wf.TopMost = true;
                    wf.Show();
                }
                )).Start();

//длительная операция
}


Invoke методы главной формы я тоже не могу вызывать, поскольку ко временни вызова не создан дескриптор главного окна.
Так как показать фому ожидания?
PM MAIL   Вверх
diadiavova
Дата 12.8.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(HAL707 @  12.8.2009,  11:24 Найти цитируемый пост)
Создаю форму в отдельном потоке. Форма не показывается.

В отдельном потоке надо не форму запускать, а выполнять операцию, завершения которой ты ожидаешь, показывая эту форму.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
kobra
Дата 19.8.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



например так 
Код

class WaitClass
    {
        public Thread WaitFormThread = new Thread(new ThreadStart(WaitFormShow));

        private static void WaitFormShow()
        {
            System.Windows.Forms.Form f = new System.Windows.Forms.Form();
            f.ShowInTaskbar = false;
            f.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height / 50;
            f.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width / 3;
            f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            f.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            System.Windows.Forms.ProgressBar pb = new System.Windows.Forms.ProgressBar();
            pb.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
            f.Controls.Add(pb);
            pb.Dock = System.Windows.Forms.DockStyle.Fill;
            pb.Step = 5;
            f.ShowDialog();
        }
    }
вызов и закрытие
Код

                WaitClass Wait = new WaitClass();
                Wait.WaitFormThread.Start();
               ...
                Wait.WaitFormThread.Abort();



Это сообщение отредактировал(а) kobra - 19.8.2009, 13:40
PM MAIL   Вверх
Sharic
Дата 22.9.2009, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



А как сделать это окошко модальным?
PM MAIL   Вверх
Sharic
Дата 23.9.2009, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



У меня такая проблема:
на форме лежит контрол ReportView, у него есть метод RefreshReport, который выполняется довольно долго. 
Так как это метод контрола, я не могу переместить эту операцию в другой поток. 
Вопрос: Как во время выполнения рефреш репорт в основном потоке показать модальное окошко с прогресбаром в другом потоке?
PM MAIL   Вверх
kobra
Дата 24.9.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Цитата(Sharic @  23.9.2009,  07:41 Найти цитируемый пост)
Вопрос: Как во время выполнения рефреш репорт в основном потоке показать модальное окошко с прогресбаром в другом потоке? 

посмотри код чуть выше
PM MAIL   Вверх
Sharic
Дата 24.9.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



Окно из кода не модальное...
PM MAIL   Вверх
kobra
Дата 24.9.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Цитата(Sharic @  24.9.2009,  12:51 Найти цитируемый пост)
Окно из кода не модальное... 
Цитата(kobra @  19.8.2009,  13:39 Найти цитируемый пост)
f.ShowDialog();

но он в другом патоке smile
PM MAIL   Вверх
Sharic
Дата 24.9.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



Теряется весь смысл этого окошка.
Что хотелось: в основном потоке идет обновление контрола (достаточно долго) и во время этого показывается модальное окошко с прогрессом,
чтобы пользователь не думал, что приложение висит и не тыкался по всей форме, что может привести к отмене генерации отчета.
Отдельно болтающееся окошко - это не очень здорово.
Хотя свою проблему решил, но немного по-другому.
PM MAIL   Вверх
kobra
Дата 24.9.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Цитата(Sharic @  24.9.2009,  14:49 Найти цитируемый пост)
Хотя свою проблему решил, но немного по-другому. 

а показать?
PM MAIL   Вверх
Sharic
Дата 28.9.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



Решение получилось не в создании какого-то хитрого окна, а в работе самого контрола ReportViewer. 
Если кому интересно, могу объяснить, а так не по теме получается.
PM MAIL   Вверх
Ciminance
Дата 24.10.2022, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.10.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.