(C#.net) Optimiser une méthode avec des threads

Qui sera l'optimiser ? :-)

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

je cherche à optimiser cette methode :

 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
private static Dispatcher dGui = Dispatcher.CurrentDispatcher;

        public static void Compress(string pathNotCompress, string pathCompress, Action<bool, string> Finish, bool highCompress = false)
        {
            if (!File.Exists(pathNotCompress)) { throw new FileNotFoundException(pathNotCompress + " is not found !"); }

            Exception ex = null;
            Thread tCompress = new Thread(new ThreadStart(() =>
            {
                try
                {
                    FileStream sFileNotCompress = new FileStream(pathNotCompress, FileMode.Open, FileAccess.Read);
                    FileStream sFileCompress = new FileStream(pathCompress, FileMode.Create);

                    Compress(sFileCompress, sFileNotCompress, highCompress);

                    sFileCompress.Close();
                    sFileNotCompress.Close();
                } catch (Exception e) { ex = e; }
            }));
            Thread tFinish = new Thread(new ThreadStart(() =>
            {
                tCompress.Start();
                tCompress.Join();

                dGui.Invoke(() => { Finish(ex == null ? false : true, ex == null ? "" : ex.ToString()); });
            }));
            tFinish.Start();
        }

Elle doit permettre d'effectuer la compression, dans un autre thread que celui de l'interface graphique et exécuter à la fin Finish.

Votre aide me sera précieuse. Urgau

Édité par Urgau

Développeur C#, Java, Vaadin et Arduino :-)

+0 -0
Staff

Pourquoi tu parle d'optimisation ?

Il y a un intérêt de le faire dans un autre thread (que le fenêtre se soit pas bloqué pendant ce temps) mais ça ne prendra pas moins de temps à le mettre dans un autre thread.

+0 -0
Auteur du sujet

Non je ne parle pas d'optimisation au niveau du temps mais plutôt au niveau du code en lui même je le trouve mal fait, il est moche.

Développeur C#, Java, Vaadin et Arduino :-)

+0 -0
Staff

A moins que tu n'utilises une vieille version de .NET, le mieux reste d'utiliser async/await.

Ce qui pourrait donner quelque chose comme :

1
2
3
4
5
6
7
8
9
public static async Task Compress(string pathNotCompress, string pathCompress, Action<bool, string> Finish, bool highCompress = false)
        {
            if (!File.Exists(pathNotCompress)) { throw new FileNotFoundException(pathNotCompress + " is not found !"); }
            await Task.Factory.StartNew(()=>{
                    using(FileStream sFileNotCompress = new FileStream(pathNotCompress, FileMode.Open, FileAccess.Read)){
                    using(FileStream sFileCompress = new FileStream(pathCompress, FileMode.Create)){
                    Compress(sFileCompress, sFileNotCompress, highCompress);
            }}});
        }

Édité par artragis

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte