Bonjour,

Je souhaiterais créer une classe générique dans mon projet qui me permettrait de lancer certaines fonctions via un BackGroundWorker. j'ai cherché sur le net, mais je pense que je m'embrouille un peu

Voicis ma classe BackgroundWorker
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
public class BackgroundJob
    {
        //Exemple d'une fonction que je souhaiterais éxécuter en arrière plan
        public delegate void GetAllCollections(SCCMSite oCurrentSite);
 
        private BackgroundWorker _backgroundWorker;
        private GetAllCollections _thisFunction;
 
        public BackgroundJob(GetAllCollections newFunction)
        {
            //Création d'un backgroundWorker
            _thisFunction = newFunction;  
            _backgroundWorker = new BackgroundWorker();
            _backgroundWorker.WorkerReportsProgress = true;
            _backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
            _backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
            _backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
        }
 
 
        public void Start()
        {
            _backgroundWorker.RunWorkerAsync();
            //newLoading = new LoadingForm();
            //newLoading.ShowDialog();
        }
 
        /// <summary>
        /// Modification de la Progression
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
 
        }
 
        /// <summary>
        /// Chargement terminé on lance la fenêtre principal
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
 
        }
 
        /// <summary>
        /// Chargement asynchrone de l'application
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
 
            if (_thisFunction != null)
                _thisFunction((SCCMSite)e.Argument); 
 
        }
    }
Voicis comment j'éssaye de l'utiliser

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
BackgroundJob bjGetAllColl = new BackgroundJob(SCCMWPFFactory.GetAllCollections(oCurrentSite));
                    bjGetAllColl.Start();
Dans ce cas la mon but c'est de faire exécuter la fonction GetAllCollections(). Je n'arrive pas à compiler, voicis les messages d'érreur

Error 1 The best overloaded method match for 'MESccmWebManager.obj.BackgroundJob.BackgroundJob(MESccmWebManager.obj.BackgroundJob.GetAllCollections)' has some invalid arguments
Error 2 Argument 1: cannot convert from 'System.Collections.ObjectModel.ObservableCollection<Objects.SCCMCollection>' to 'MESccmWebManager.obj.BackgroundJob.GetAllCollections'
Bien que le message soit asser clair, Pourriez vous me dire comment faire éxecuter ma fonction "GetAllCollections" avec son argument ?

Si je souhaite utiliser ma classe de manière générique, CAD pour traiter différentes fonctions, devrais créer autant de délegate que de fonctions dans la classe BackgroundWorker ?

Comment effectuer un bon traitement au niveau de backgroundWorker_DoWork ?

Merci d'avance pour vos exemples/aide