Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Зависания компонентов.


Автор: Felixx 19.8.2012, 21:15
Всем привет, подскажите плз, почему компоненты какбы, зависают.

Например:
Код

        private static MainForm _instance;
        public static MainForm Instance
        {
            get { return _instance ?? (_instance = new MainForm()); }
        }

         private void button2_Click(object sender, EventArgs e)
         {
            String path = gamePath.Text;

            if (Directory.Exists(path))
            {
                button3_Click(sender, e);
                String[] allfiles = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
                Instance.progressBar1.Minimum = 0;
                Instance.progressBar1.Maximum = allfiles.Length;
                Instance.progressBar1.Value = 0;
                Instance.progressBar1.Step = 1;

                for (int i = 0; i < allfiles.Length; i++)
                {
                    FileInfo fi = new FileInfo(allfiles[i]);
                    Instance.Text = "Работаем с файлом: " + fi.FullName;

                    addText(fi.FullName);
                    goZip(fi);
                    Instance.progressBar1.Value++;
                }
            }
            else
            {
                MessageBox.Show("No Have Dir: " + path);
            }
        }
        void addText(string newText)
        {
            if (listBox1.InvokeRequired)
                listBox1.Invoke(new Action<string>((s) => listBox1.Items.Add(s)), newText);
            else
                listBox1.Items.Add(newText);
        }
        private void goZip(FileInfo f)
        {
            using (ZipFile zip = new ZipFile()) // Создаем объект для работы с архивом
            {
                zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; // Задаем максимальную степень сжатия 
                zip.AddItem(f.FullName, ""); // Кладем в архив одиночный файл

                string zipPath = Environment.CurrentDirectory + @"\packed" +  f.FullName.Replace(gamePath.Text, "").Replace(f.Name, "");
                if (!Directory.Exists(zipPath))
                    Directory.CreateDirectory(zipPath);
   
                zip.Save(Environment.CurrentDirectory + @"\packed" + f.FullName.Replace(gamePath.Text, "") + ".zip"); // Создаем архив     
            }
        }


Когда в listBox добавляется запись, то сам листбокс как бы подвисает, и почти не видно как итемы добавляются.
ТОже самое с label, если ему присваивать каждый раз имя файла с которым работаем, не показывает ничего, только последний.
пришлось сделать запись рабочего файла в заголовок формы самой.. Instance.Text = "Работаем с файлом: " + fi.FullName;
Так нормально.. И форму во время выполнения не перетащит ьникак, она как бы висит smile
А процесс этот очень долгий... и ка кто не посебе когда все это весит.. Возможно ли как то починить?

Автор: Felixx 20.8.2012, 13:34
Вобщем как я понел надо юзать BackgroundWorker и все будет гуд.

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