Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Создание прогресс бара, работа с потоками


Автор: Nadezda 1.8.2013, 15:50
Для загрузки диалога необходимо собрать (прочитать) некоторые данные. Иногда процесс сбора данных может затянуться. Поэтому надо перед загрузкой диалога показывать окошко с прогрес-баром, либо просто сообщением пользователю, чтобы он подождал.
Однако ничего не выходит. Почему-то диалог с прогресс баром показывается только в виде серого прямоугольника без какого либо изображения. Изображение на этом диалоге появляется в лучшем случае в конце процесса загрузки данных, когда практически уже и не нужно.

По идее всё должно работать так: 
Код

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.

Пытаюсь использовать потоки - ничего толком не получается.

Код

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();
            while (myThread.ThreadState == ThreadState.Running)
                bImported = false;
            Thread.Sleep(10);
            bImported = true;
            if(bImported)
                waitForm.Close();
            ImportPreviewForm prevForm = new ImportPreviewForm(mPath, members, plates, sectManager);
            prevForm.Show();
        }

        void func() 
        {
            ImportModelUtils.ImportModel(mPath, mInd, ref members, ref plates, sectManager);
            bImported = true;
            Thread.Sleep(0);
        }
    }


Просто я плохо понимаю механизм работы с потоками.

Автор: dzaraev 1.8.2013, 21:49
Внимательно изучите этот класс, скорее всего он полностью подойдёт под вашу задачу: http://msdn.microsoft.com/ru-ru/library/System.ComponentModel.BackgroundWorker(v=vs.100).aspx. С его же помощью можно также легко сделать програсс-бар или не делать, если не надо. Читайте до конца, внизу есть информация как его использовать и примеры.
На всякий случай прикладываю простейший пример его использования.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)