Classe générique BackGroundWorker
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:
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:
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
Citation:
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