Mise en place d'un évènement, Je désespère ;( !!!

Résolu
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 2 déc. 2005 à 01:13
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 2 déc. 2005 à 11:48
Bonsoir,
Je commence à désespérer je n'arrive pas à mettre en place un évènement, je ne compte plus les heures que je passe sur ce **** d'événement
J'ai beau regarder la documentation MSDN je n'ai pas trouvé d'exemple concret d'event.
Quelqu'un a -t-il un exemple similaire à mon cas ?
Merci d'avance

Alors voila, j'ai une ClassLibrairy,
J'ai dans une méthode une boucle qui fait varier une variable et je voudrais récupérer sa valeur pour faire avancer une progressbar
Donc je pensais à mettre en place un évènement OnProgress qui donnerais ma valeur de progression
Voici mon bout de code

public class MaClasse
{
private int m_Value;

public void MaMethode()
{
for(int i=0; i< 10000; i++)
{
m_Value = i;
}
}

4 réponses

LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
2 déc. 2005 à 05:18
Salut Willi !

En effet, c'est pas vraiment bien expliqué dans MSDN,
mais tu verras, c'est assez simple à mettre en place :

Je suis en train de développer une classe qui permet de crypter/décrypter des fichiers
Et, tout comme toi, j'ai dû générer un événement qui indique la progression du traitement
J'ai en plus ajouter une propriété "Abord" qui permet d'indiquer si l'action doit être annulée !

* Tout d'abord, tu dois créer la classe d'arguments de l'évènement (en dehors de ta classe) :


/// <summary>Argument de l'événement généré lorsque la progression d'un traitement évolue</summary>
public
class CryptionProgressEventArgs : EventArgs
{

private
string _fileName;

private
int _percent;

private
bool _isEncrypting;

private
bool _abord;

/// <summary>Constructeur</summary>
/// Fichier en cours de cryptage/décryptage

/// Pourcentage du traitement effectué

/// Valeur indiquant s'il s'agit d'un cryptage

public CryptionProgressEventArgs(
string fileName,
int percent,
bool isEncrypting ) :
base()
{
_fileName = fileName;
_percent = percent;
_isEncrypting = isEncrypting;
_abord =
false;
}

/// <summary>Fichier en cours de cryptage/décryptage</summary>
public
string FileName
{

get{
return _fileName; }
}

/// <summary>Pourcentage du traitement effectué</summary>
public
int Percent
{

get{
return _percent; }
}

/// <summary>Valeur indiquant s'il s'agit d'un cryptage (false : décryptage)</summary>
public
bool IsEncrypting
{

get{
return _isEncrypting; }
}

/// <summary>Obtient ou défini une valeur indiquant si l'action en cours doit être annulée</summary>
public
bool Abord
{

get{
return _abord; }

set{ _abord =
value; }
}
}

* Ensuite tu crées le délégué de ton évènement (En dehors de ta classe aussi, c'est préférable) :



/// <summary>Délégué de l'événement indiquant la progression d'un traitement</summary>
public
delegate
void CryptionProgressDelegate( CryptionProgressEventArgs e );

* Et finalement tu crées l'évènement (dans ta classe) :



/// <summary>Evénement généré pour indiquer la progression d'un cryptage/décryptage</summary>
public
event CryptionProgressDelegate OnCryptionProgress;



* Pour générer l'évènement (toujours dans ta classe) :

// Au moin un objet est abonné à l'évènement
if( OnCryptionProgress != null )
{
// Crée les arguments de l'évènement
CryptionProgressEventArgs eventArgs;
eventArgs =
new CryptionProgressEventArgs( sourceFile, currentPercent, isEncryption );

// Génère l'évènement

OnCryptionProgress( eventArgs );

// A partir d'ici, la propriété eventArgs.Abord a été positionné par l'objet abonné à l'évènement
}



Du côté de l'objet qui utilise ta classe, je pense que sais comment faire....
A toi de jouer !
3
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
2 déc. 2005 à 11:15
Ben, c'est pour indiquer le fichier, la valeur de la progression et le traitement...

Voilà le code qui se trouve dans l'objet qui utilise ma classe :


private void fileCryption_OnCryptionProgress( CryptionProgressEventArgs e )
{
// Récupère l'action en cours
string action = "Cryptage";

if( ! e.IsEncrypting )
action = "Décryptage";

// Met à jour la barre de progression
progressBar.Text = action + " du fichier " + e.FileName + " en cours...";
progressBar.Value = e.Percent;
}
3
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
2 déc. 2005 à 10:53
Parfait,
En fait ce qui m'étonne c'est que mon code été comme le tient mais il me manquait le petit plus de la création de l'abonnement...
En tout cas cela fonctionne et c'est vraiment simple au final....

par contre à quoi servent tes propriétés dans ta classe CryptionProgressEventArgs à part Abord ?
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
2 déc. 2005 à 11:48
Oui effectivement je sais.... j'ai utilisé ma propriété percent pour tester avant de poster ma question....gniiii je me tairais la prochaine fois
Ok bien encore merci mille fois de ton aide

Bonne journée ++
0
Rejoignez-nous