0 / 0 / 0
Регистрация: 24.09.2010
Сообщений: 14
1

Подвисание приложения

06.10.2010, 14:23. Показов 2824. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!

Вот листинг MainForm.cs - это простенький архиватор, работающий с 7z.dll. Все архивируется замечательно, но во время процесса архивации форма подвисает, пока процесс не закончится.

Куда посоветуете копнуть?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
 
using System.Xml;
using SevenZip;
 
namespace FlashDumper
{
    public partial class MainForm : Form
    {
        static private string configFile = "flashdumper.xml";
 
        static string confDestination, confDirectory;
        
        delegate void SetProgressDelegate(ProgressEventArgs args);
        delegate void SetFileNameDelegate(FileNameEventArgs args);
        delegate void SetInfoDelegate(FileInfoEventArgs args);
        delegate void SetOverwriteDelegate(FileOverwriteEventArgs args);
        delegate void SetSettings(SevenZipCompressor compr);
        delegate void SetNoArgsDelegate();
        
        string archFileName, directory, pwd;
        string[] filesToCompress;
        
        string dllPath = "7z.dll";
        
        System.Threading.Thread t;
        
        public MainForm()
        {
            InitializeComponent();
            readConfig(configFile);
            
            archFileName = confDestination+"\\"+DateTime.Now.ToString("yyyy_MM_dd__HH_mm_ss")+".7z";
            directory = confDirectory;
            
            //t = new System.Threading.Thread(new System.Threading.ThreadStart(CompressThread));
            //t.Start();
        }
        
        private static void readConfig(string cFile)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(cFile);
 
            XmlNodeList dir = doc.GetElementsByTagName("directory");
            confDirectory = dir[0].InnerText;
 
            XmlNodeList dest = doc.GetElementsByTagName("destination");
            confDestination = dest[0].InnerText;
        }
        
        void Compress()
        {
            try
            {
                SevenZipCompressor.SetLibraryPath(dllPath);
                SevenZipCompressor cmp = new SevenZipCompressor();
                cmp.Compressing += new EventHandler<ProgressEventArgs>(cmp_Compressing);
                cmp.FileCompressionStarted += new EventHandler<FileNameEventArgs>(cmp_FileCompressionStarted);
                cmp.CompressionFinished += new EventHandler<EventArgs>(cmp_CompressionFinished);
 
                this.Invoke(new SetSettings((compressor) =>
                {
                    compressor.ArchiveFormat = OutArchiveFormat.SevenZip;
                    compressor.CompressionLevel = CompressionLevel.Fast;
                    //compressor.FastCompression = true;
                    //compressor.CompressionMethod = CompressionMethod.Lzma2;
 
                    if (pwd != null && !pwd.Trim().Equals(""))
                    {
                        compressor.EncryptHeaders = true;
                        compressor.ZipEncryptionMethod = ZipEncryptionMethod.Aes256;
                    }
                }), cmp);
 
                if (directory != null && !directory.Equals(""))
                    cmp.CompressDirectory(directory, archFileName);
                else if (filesToCompress != null && filesToCompress.Length > 0)
                {   
                    if (pwd != null && !pwd.Trim().Equals(""))
                        cmp.CompressFilesEncrypted(archFileName, pwd, filesToCompress);
                    else
                        cmp.CompressFiles(archFileName, filesToCompress);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        void cmp_Compressing(object sender, ProgressEventArgs e)
        {
            progressBar.Invoke(new SetProgressDelegate((args) =>
            {
                progressBar.Increment(args.PercentDelta);
            }), e);
        }
 
        void cmp_FileCompressionStarted(object sender, FileNameEventArgs e)
        {
            label.Invoke(new SetFileNameDelegate((args) =>
            {
                label.Text = String.Format("Compressing \"{0}\"", e.FileName);
            }), e);
        }
 
        void cmp_CompressionFinished(object sender, EventArgs e)
        {
            label.Invoke(new SetNoArgsDelegate(() =>
            {
                label.Text = "Finished";
                progressBar.Value = 0;
            }));
        }       
 
        void BtnCancelClick(object sender, EventArgs e)
        {
            this.Close();
        }
        
        void BtnStartClick(object sender, EventArgs e)
        {
            btnCancel.Enabled = false;
            btnStart.Enabled = false;
                
            label.Text = "Подготовка к резервному копированию...";
 
            Compress();
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2010, 14:23
Ответы с готовыми решениями:

Подвисание формы при вызове Show()
Есть такая ситуация: загружается главная форма и в событии Shown вызывается другая форма: ...

Подвисание окна при доступе к контролу из потока...
При нажатии на кнопку создается и стартуется поток, который получает текст из текстового поля и...

Подвисание IE при заходе на страничку.
Есть машина с Win98+IE5.5 и есть машина с NT4.0+IE5.5 И есть простенькая страничка в которую...

Подвисание формы и потоки
Решил написал FE, только вот обнаружил, что при открытии больших папок прога заметно подвисает....

21
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
08.10.2010, 22:09 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Konctantin Посмотреть сообщение
C#
1
2
3
4
5
6
Action p = () =>
{
    _pbProgress.Visible = true;
    _pbProgress.Value = 0;
    _pbProgress.Maximum = list.Count;
};
Можете рассказать что это за код, и что он делает, протсо впервые вижу такой синтаксис, рыл на msdn там нашел, что Action - делегат, еще нарыл что здесь есть какоето лямда выражение, можете кто-то толком растолковать, а то немного не понятно...
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
09.10.2010, 01:19 22
это обычное действие, без каких либо параметров:
C#
1
Action p = (/*тут можно передавать параметры*/) =>
это для того чтобы не объявлять явно делегат метода.

он написан так для того, чтобы
C#
1
2
3
4
        if (_tbTo.InvokeRequired)
                _tbTo.Invoke(p);
        else
                p();
использовать его в нужном месте

образно говоря, это процедура внутри функции, их есть 2 вида, те что ничего не возвращают Action и те которые возвращают значение Func
1
09.10.2010, 01:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2010, 01:19
Помогаю со студенческими работами здесь

Подвисание формы при перетаскивании
Добрый день. Есть следующая проблема. Рисую на компоненте ZedGraphControl график из большого...

Подвисание программы при хеширование
Все доброго времени суток. У меня вот такая проблема: - При обработке хэша большого по размеру...

Убрать подвисание при загрузке на FTP
Собственно говоря, проблема в том что при выполнении загрузки файла на FTP компьютер просто...

Подвисание программы из за большого массива, принимаемого с сервера
С сервера считывается массив, где-то до 1500 4-злачных элементов, после небольшой манипуляции с...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

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