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

Qui sera l'optimiser ? :-)

a marqué ce sujet comme résolu.

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

+0 -0

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);
            }}});
        }
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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