Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание прогресс бара.

1.8K
26 июля 2013 года
Nadezda
62 / / 31.05.2004
Для загрузки диалога необходимо собрать (прочитать) некоторые данные. Иногда процесс сбора данных может затянуться. Поэтому надо перед загрузкой диалога показывать окошко с прогрес-баром, либо просто сообщением пользователю, чтобы он подождал.
Однако ничего не выходит. Почему-то диалог с прогресс баром показывается только в виде серого прямоугольника без какого либо изображения. Изображение на этом диалоге появляется в лучшем случае в конце процесса загрузки данных, когда практически уже и не нужно.
Что делать?
7
26 июля 2013 года
@pixo $oft
3.4K / / 20.09.2006
Надо обрабатывать события в отдельном потоке. Естественно, что прогресс-бар отрисовывается только после того, как всё загрузится.
1.8K
30 июля 2013 года
Nadezda
62 / / 31.05.2004
Цитата: @pixo $oft
Надо обрабатывать события в отдельном потоке. Естественно, что прогресс-бар отрисовывается только после того, как всё загрузится.


К сожалению я не очень понимаю, как работать с потоками и как применять их к диалогам. Может есть какой-нибуть пример?

7
30 июля 2013 года
@pixo $oft
3.4K / / 20.09.2006
Примеров масса. Про потоки можно прочитать в MSDN. Для большей информативности желательно указать язык, а то вдруг речь про C♯ идёт.
327
31 июля 2013 года
UserNet2008
748 / / 03.04.2010
Цитата: @pixo $oft
Примеров масса. Про потоки можно прочитать в MSDN. Для большей информативности желательно указать язык, а то вдруг речь про C♯ идёт.


Это точно!!!

Цитата:
а то вдруг речь про C♯ идёт.

чё так . Вроде C# and VB-net в потоках нормально.

И ещё не очень понятен механизм сбора данных.

Цитата:
Для загрузки диалога необходимо собрать (прочитать) некоторые данные.

1.8K
31 июля 2013 года
Nadezda
62 / / 31.05.2004
В общем, привожу кусок кода:


 
Код:
ImportWatingForm waitForm = new ImportWatingForm();
waitForm.Show();
                   
ImportModelUtils.ImportModel(path, ind, ref members, ref plates, sectManager);
waitForm.Hide();

ImportPreviewForm prevForm = new ImportPreviewForm(path, members, plates, sectManager);
prevForm.Show();
В общем, мне надо чтобы сначала появилась форма waitForm (нормально показалась со всеми контролами), потом прочитать данные из файла- функция
ImportModelUtils.ImportModel, а потом убрать waitForm и показать prevForm.

Читаю разные примеры и хелпы, пытаюсь химичить, но ничего не выходит. Либо waitForm нормально не показывается, либо показывется, но не выключается, либо вовсе не загружается.

С потоками столько всего разного, что никак не могу понять, как надо действовать в этой ситуации. Примеры чаще всего для консольных аппликаций.
1.8K
31 июля 2013 года
Nadezda
62 / / 31.05.2004
ImportModel- Это и есть процесс считывания данных. В общем, его можно перекинуть в любое место.
И в общем не обязательно прогресс бар- достаточно окошка с надписью "Пожалуйста подождите, идёт процесс чтения файла".

Просто я хочу, чтобы пользователь видел, что процесс идёт.
ImportWatingForm должна появляться в центре экрана. В ней нет ни рамочек, ни кнопочек, поэтому она должна появиться и убраться сама.

 
Код:
List<ImportedMemberData> members = new List<ImportedMemberData>();
List<ImportPlateData> plates = new List<ImportPlateData>();
- это и есть получаемые данные.

Когда все данные загрузятся, должна выскочить форма ImportPreviewForm, которая их обрабатывает, то есть показывает результат считывания.
327
31 июля 2013 года
UserNet2008
748 / / 03.04.2010
Самый простой способ это менять курсор
 
Код:
this.Cursor = Cursors.WaitCursor;
this.Current = Cursors.Default;
1.8K
31 июля 2013 года
Nadezda
62 / / 31.05.2004
Ну, если ничего не выйдет с окном, придётся влиять на курсор. Хотя окошко с предупреждением для пользоателя было бы предпочтительнее.
7
31 июля 2013 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: UserNet2008
Вроде C# and VB-net в потоках нормально

Да я не к тому, что C♯ плохо дружит с потоками, просто надо было язык узнать.

Итак, C♯, отлично. В нём я не эксперт, но алгоритм, я думаю, сработает везде:
• создаёшь новый поток, в методе потока начинаешь загрузку данных,
• в текущем потоке создаёшь окно,
• если метод загрузки данных собственный, а не сторонний, то наверняка можно узнать прогресс получения оных, который будет передаваться в 1-й поток и выводиться на форме прогресса.

1.8K
01 августа 2013 года
Nadezda
62 / / 31.05.2004
Код:
class ImportProcess
    {
        List<ImportedMemberData> members = new List<ImportedMemberData>();
        List<ImportPlateData> plates = new List<ImportPlateData>();
        SectionManager sectManager = new SectionManager();
        string mPath;
        int mInd;
        bool bImported = false;

        public ImportProcess(string strPath, int ind)
        {
            mPath = strPath;
            mInd = ind;
        }

        public void Import()
        {
           
           
            Thread myThread = new Thread(func);
            myThread.Start();
            //members = waitForm.Members;
            //plates = waitForm.Plates;
            ImportWatingForm waitForm = new ImportWatingForm(mPath, mInd, sectManager);
            waitForm.Show();
           
            ImportPreviewForm prevForm = new ImportPreviewForm(mPath, members, plates, sectManager);
            prevForm.Show();
        }

        void func()
        {
            ImportModelUtils.ImportModel(mPath, mInd, ref members, ref plates, sectManager);
            bImported = true;
        }
    }
Так что ли? Только я не могу понять, как определить, что импорт завершился и закрыть окно ImportWatingForm .
85K
06 августа 2013 года
Алексей Иевенко
16 / / 06.08.2013
А зачем в данном случае использовать потоки? Не лучше ли использовать события на начало считывания и на конец считывания. Если начало считывания — запускаем прогресс-бар. Когда уже нет ничего считывать — закрываем его. Нужно лишь продумать увеличение значения прогресс-бара со считыванием данных, либо привязку сделать все же объекту таймера и к событию Tick.....
1.8K
07 августа 2013 года
Nadezda
62 / / 31.05.2004
А зачем в данном случае использовать потоки? Не лучше ли использовать события на начало считывания и на конец считывания. Если начало считывания — запускаем прогресс-бар. Когда уже нет ничего считывать — закрываем его. Нужно лишь продумать увеличение значения прогресс-бара со считыванием данных, либо привязку сделать все же объекту таймера и к событию Tick.....


Ничего не получается. В этом случае прогресс бар просто не отображается. Его не видно. В лучшем случае показывается, когда уже поздно и не нужно.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог