Bonjour,
j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté mon
IHM classique de type Winform et de l'autre une dll contenant un ensemble
classes regroupées en packages.
Je veux que mon IHM affiche la progression de mon traitement (par exemple,
afficher dans un scrollbar le pourcentage de fichier parcouru ou le
pourcentage d'octets téléchargés) mais ce traitement s'effectue dans ma
au fin fond d'une classe bien "à l'abri" dans son package (découplage
oblige).
D'un point de vue architecture objet, quelle est la meilleure pratique
propager ce genre d'information d'une classe fonctionnelle vers une IHM ?
Bonjour,
j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté mon
IHM classique de type Winform et de l'autre une dll contenant un ensemble
classes regroupées en packages.
Je veux que mon IHM affiche la progression de mon traitement (par exemple,
afficher dans un scrollbar le pourcentage de fichier parcouru ou le
pourcentage d'octets téléchargés) mais ce traitement s'effectue dans ma
au fin fond d'une classe bien "à l'abri" dans son package (découplage
oblige).
D'un point de vue architecture objet, quelle est la meilleure pratique
propager ce genre d'information d'une classe fonctionnelle vers une IHM ?
Bonjour,
j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté mon
IHM classique de type Winform et de l'autre une dll contenant un ensemble
classes regroupées en packages.
Je veux que mon IHM affiche la progression de mon traitement (par exemple,
afficher dans un scrollbar le pourcentage de fichier parcouru ou le
pourcentage d'octets téléchargés) mais ce traitement s'effectue dans ma
au fin fond d'une classe bien "à l'abri" dans son package (découplage
oblige).
D'un point de vue architecture objet, quelle est la meilleure pratique
propager ce genre d'information d'une classe fonctionnelle vers une IHM ?
Salut,
Le mieux est de déclarer un delegate/évenement dans ta classe et que l'IHM
s'abonne ou pas à celui-ci. Il existe une best practice pour ceci. Voici
exemple (je pars de la copie d'un fichier)
using System;
namespace Library {
public delegate void FileCopyProgressEventHandler(object sender,
FileCopyProgressArgs e);
public class MaClasse {
public event FileCopyProgressEventHandler FileCopyProgress = null;
public void FileCopy(string originalFile, string destinationFile) {
// Je simule une boucle sur la taille du fichier
for (int i = 0; i < 1000000; i++) {
if (FileCopyProgress != null) {
FileCopyProgress(this, new FileCopyProgressArgs(Convert.ToSingle(i) /
Convert.ToSingle(1000000)));
}
}
}
}
public class FileCopyProgressArgs : EventArgs {
private float pourcentage = 0;
public float Pourcentage {
get {
return(this.pourcentage);
}
}
public FileCopyProgressArgs(float pourcentage) {
this.pourcentage = pourcentage;
}
}
}
namespace IHM {
public class MainClass {
public static void Main() {
Library.MaClasse maClasse = new Library.MaClasse();
maClasse.FileCopyProgress += new
Library.FileCopyProgressEventHandler(maClasse_FileCopyProgress);
maClasse.FileCopy("OriginalFile", "DestinationFile");
Console.ReadLine();
}
public static void maClasse_FileCopyProgress(object sender,
Library.FileCopyProgressArgs e) {
Console.WriteLine(e.Pourcentage.ToString("##0.00%"));
}
}
}
A bientôt,
--
Pascal Belaud - Microsoft France
OlyMars: SQL Server Centric .NET Code Generator
http://www.microsoft.com/france/msdn/olymars
http://www.olymars.net/latest.zip (interim build)
http://blogs.msdn.com/olymars
"Thierry Fierville" wrote in message
news:
> Bonjour,
>
> j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté
> IHM classique de type Winform et de l'autre une dll contenant un
de
> classes regroupées en packages.
> Je veux que mon IHM affiche la progression de mon traitement (par
> afficher dans un scrollbar le pourcentage de fichier parcouru ou le
> pourcentage d'octets téléchargés) mais ce traitement s'effectue dans ma
dll,
> au fin fond d'une classe bien "à l'abri" dans son package (découplage
> oblige).
> D'un point de vue architecture objet, quelle est la meilleure pratique
pour
> propager ce genre d'information d'une classe fonctionnelle vers une IHM
>
>
Salut,
Le mieux est de déclarer un delegate/évenement dans ta classe et que l'IHM
s'abonne ou pas à celui-ci. Il existe une best practice pour ceci. Voici
exemple (je pars de la copie d'un fichier)
using System;
namespace Library {
public delegate void FileCopyProgressEventHandler(object sender,
FileCopyProgressArgs e);
public class MaClasse {
public event FileCopyProgressEventHandler FileCopyProgress = null;
public void FileCopy(string originalFile, string destinationFile) {
// Je simule une boucle sur la taille du fichier
for (int i = 0; i < 1000000; i++) {
if (FileCopyProgress != null) {
FileCopyProgress(this, new FileCopyProgressArgs(Convert.ToSingle(i) /
Convert.ToSingle(1000000)));
}
}
}
}
public class FileCopyProgressArgs : EventArgs {
private float pourcentage = 0;
public float Pourcentage {
get {
return(this.pourcentage);
}
}
public FileCopyProgressArgs(float pourcentage) {
this.pourcentage = pourcentage;
}
}
}
namespace IHM {
public class MainClass {
public static void Main() {
Library.MaClasse maClasse = new Library.MaClasse();
maClasse.FileCopyProgress += new
Library.FileCopyProgressEventHandler(maClasse_FileCopyProgress);
maClasse.FileCopy("OriginalFile", "DestinationFile");
Console.ReadLine();
}
public static void maClasse_FileCopyProgress(object sender,
Library.FileCopyProgressArgs e) {
Console.WriteLine(e.Pourcentage.ToString("##0.00%"));
}
}
}
A bientôt,
--
Pascal Belaud - Microsoft France
OlyMars: SQL Server Centric .NET Code Generator
http://www.microsoft.com/france/msdn/olymars
http://www.olymars.net/latest.zip (interim build)
http://blogs.msdn.com/olymars
"Thierry Fierville" <remidubreuil@hotmail.com> wrote in message
news:OJl4SeMnEHA.3396@tk2msftngp13.phx.gbl...
> Bonjour,
>
> j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté
> IHM classique de type Winform et de l'autre une dll contenant un
de
> classes regroupées en packages.
> Je veux que mon IHM affiche la progression de mon traitement (par
> afficher dans un scrollbar le pourcentage de fichier parcouru ou le
> pourcentage d'octets téléchargés) mais ce traitement s'effectue dans ma
dll,
> au fin fond d'une classe bien "à l'abri" dans son package (découplage
> oblige).
> D'un point de vue architecture objet, quelle est la meilleure pratique
pour
> propager ce genre d'information d'une classe fonctionnelle vers une IHM
>
>
Salut,
Le mieux est de déclarer un delegate/évenement dans ta classe et que l'IHM
s'abonne ou pas à celui-ci. Il existe une best practice pour ceci. Voici
exemple (je pars de la copie d'un fichier)
using System;
namespace Library {
public delegate void FileCopyProgressEventHandler(object sender,
FileCopyProgressArgs e);
public class MaClasse {
public event FileCopyProgressEventHandler FileCopyProgress = null;
public void FileCopy(string originalFile, string destinationFile) {
// Je simule une boucle sur la taille du fichier
for (int i = 0; i < 1000000; i++) {
if (FileCopyProgress != null) {
FileCopyProgress(this, new FileCopyProgressArgs(Convert.ToSingle(i) /
Convert.ToSingle(1000000)));
}
}
}
}
public class FileCopyProgressArgs : EventArgs {
private float pourcentage = 0;
public float Pourcentage {
get {
return(this.pourcentage);
}
}
public FileCopyProgressArgs(float pourcentage) {
this.pourcentage = pourcentage;
}
}
}
namespace IHM {
public class MainClass {
public static void Main() {
Library.MaClasse maClasse = new Library.MaClasse();
maClasse.FileCopyProgress += new
Library.FileCopyProgressEventHandler(maClasse_FileCopyProgress);
maClasse.FileCopy("OriginalFile", "DestinationFile");
Console.ReadLine();
}
public static void maClasse_FileCopyProgress(object sender,
Library.FileCopyProgressArgs e) {
Console.WriteLine(e.Pourcentage.ToString("##0.00%"));
}
}
}
A bientôt,
--
Pascal Belaud - Microsoft France
OlyMars: SQL Server Centric .NET Code Generator
http://www.microsoft.com/france/msdn/olymars
http://www.olymars.net/latest.zip (interim build)
http://blogs.msdn.com/olymars
"Thierry Fierville" wrote in message
news:
> Bonjour,
>
> j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté
> IHM classique de type Winform et de l'autre une dll contenant un
de
> classes regroupées en packages.
> Je veux que mon IHM affiche la progression de mon traitement (par
> afficher dans un scrollbar le pourcentage de fichier parcouru ou le
> pourcentage d'octets téléchargés) mais ce traitement s'effectue dans ma
dll,
> au fin fond d'une classe bien "à l'abri" dans son package (découplage
> oblige).
> D'un point de vue architecture objet, quelle est la meilleure pratique
pour
> propager ce genre d'information d'une classe fonctionnelle vers une IHM
>
>
Ok, merci pour ta réponse détaillée qui confirme ce que je supposais être
solution, c'est à dire un delegate.
Maintenant, admettons que je doive à la fois abonner l'IHM (pour le
progressbar) et un autre objet de la classe toto au même événement pour
d'un côté, l'IHM actualise la progression et que, de l'aute côté, la
toto fasse un traitement lambda.
La solution que j'ai trouvé consiste à rendre l'événement static mais ça
pose évidemment un problème si on veut utiliser plusieurs instances
différentes de la classe MaClasse (déclarant le delegate) pour des
traitements différents, par exemple en multithread ou par exemple si dans
cas on veut que l'IHM réagisse mais pas dans un autre cas.
Je peux par exemple avoir besoin d'une classe de recherche de fichiers
déclarant un event pour lequel l'IHM affiche une progressbar, mais dans un
autre cas, avoir une classe utilisant cette même classe de recherche de
fichiers pour des besoins internes sans que l'IHM n'ait à réagir.
Quelle alternative au static dans ce cas là ?
"Pascal Belaud [MS]" wrote in message
news:uA%23E$
> Salut,
>
> Le mieux est de déclarer un delegate/évenement dans ta classe et que
> s'abonne ou pas à celui-ci. Il existe une best practice pour ceci. Voici
un
> exemple (je pars de la copie d'un fichier)
>
> using System;
>
> namespace Library {
>
> public delegate void FileCopyProgressEventHandler(object sender,
> FileCopyProgressArgs e);
>
> public class MaClasse {
>
> public event FileCopyProgressEventHandler FileCopyProgress = null;
>
> public void FileCopy(string originalFile, string destinationFile) {
>
> // Je simule une boucle sur la taille du fichier
> for (int i = 0; i < 1000000; i++) {
>
> if (FileCopyProgress != null) {
>
> FileCopyProgress(this, new FileCopyProgressArgs(Convert.ToSingle(i)
> Convert.ToSingle(1000000)));
> }
> }
> }
> }
>
> public class FileCopyProgressArgs : EventArgs {
>
> private float pourcentage = 0;
> public float Pourcentage {
>
> get {
>
> return(this.pourcentage);
> }
> }
>
> public FileCopyProgressArgs(float pourcentage) {
>
> this.pourcentage = pourcentage;
>
> }
> }
> }
>
> namespace IHM {
>
> public class MainClass {
>
> public static void Main() {
>
> Library.MaClasse maClasse = new Library.MaClasse();
> maClasse.FileCopyProgress += new
> Library.FileCopyProgressEventHandler(maClasse_FileCopyProgress);
>
> maClasse.FileCopy("OriginalFile", "DestinationFile");
>
> Console.ReadLine();
> }
>
> public static void maClasse_FileCopyProgress(object sender,
> Library.FileCopyProgressArgs e) {
>
> Console.WriteLine(e.Pourcentage.ToString("##0.00%"));
> }
> }
> }
>
> A bientôt,
>
> --
> Pascal Belaud - Microsoft France
> OlyMars: SQL Server Centric .NET Code Generator
>
> http://www.microsoft.com/france/msdn/olymars
> http://www.olymars.net/latest.zip (interim build)
> http://blogs.msdn.com/olymars
> "Thierry Fierville" wrote in message
> news:
> > Bonjour,
> >
> > j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté
mon
> > IHM classique de type Winform et de l'autre une dll contenant un
ensemble
> de
> > classes regroupées en packages.
> > Je veux que mon IHM affiche la progression de mon traitement (par
exemple,
> > afficher dans un scrollbar le pourcentage de fichier parcouru ou le
> > pourcentage d'octets téléchargés) mais ce traitement s'effectue dans
> dll,
> > au fin fond d'une classe bien "à l'abri" dans son package (découplage
> > oblige).
> > D'un point de vue architecture objet, quelle est la meilleure pratique
> pour
> > propager ce genre d'information d'une classe fonctionnelle vers une
?
> >
> >
>
>
Ok, merci pour ta réponse détaillée qui confirme ce que je supposais être
solution, c'est à dire un delegate.
Maintenant, admettons que je doive à la fois abonner l'IHM (pour le
progressbar) et un autre objet de la classe toto au même événement pour
d'un côté, l'IHM actualise la progression et que, de l'aute côté, la
toto fasse un traitement lambda.
La solution que j'ai trouvé consiste à rendre l'événement static mais ça
pose évidemment un problème si on veut utiliser plusieurs instances
différentes de la classe MaClasse (déclarant le delegate) pour des
traitements différents, par exemple en multithread ou par exemple si dans
cas on veut que l'IHM réagisse mais pas dans un autre cas.
Je peux par exemple avoir besoin d'une classe de recherche de fichiers
déclarant un event pour lequel l'IHM affiche une progressbar, mais dans un
autre cas, avoir une classe utilisant cette même classe de recherche de
fichiers pour des besoins internes sans que l'IHM n'ait à réagir.
Quelle alternative au static dans ce cas là ?
"Pascal Belaud [MS]" <pascalbe@online.microsoft.com> wrote in message
news:uA%23E$dNnEHA.396@TK2MSFTNGP10.phx.gbl...
> Salut,
>
> Le mieux est de déclarer un delegate/évenement dans ta classe et que
> s'abonne ou pas à celui-ci. Il existe une best practice pour ceci. Voici
un
> exemple (je pars de la copie d'un fichier)
>
> using System;
>
> namespace Library {
>
> public delegate void FileCopyProgressEventHandler(object sender,
> FileCopyProgressArgs e);
>
> public class MaClasse {
>
> public event FileCopyProgressEventHandler FileCopyProgress = null;
>
> public void FileCopy(string originalFile, string destinationFile) {
>
> // Je simule une boucle sur la taille du fichier
> for (int i = 0; i < 1000000; i++) {
>
> if (FileCopyProgress != null) {
>
> FileCopyProgress(this, new FileCopyProgressArgs(Convert.ToSingle(i)
> Convert.ToSingle(1000000)));
> }
> }
> }
> }
>
> public class FileCopyProgressArgs : EventArgs {
>
> private float pourcentage = 0;
> public float Pourcentage {
>
> get {
>
> return(this.pourcentage);
> }
> }
>
> public FileCopyProgressArgs(float pourcentage) {
>
> this.pourcentage = pourcentage;
>
> }
> }
> }
>
> namespace IHM {
>
> public class MainClass {
>
> public static void Main() {
>
> Library.MaClasse maClasse = new Library.MaClasse();
> maClasse.FileCopyProgress += new
> Library.FileCopyProgressEventHandler(maClasse_FileCopyProgress);
>
> maClasse.FileCopy("OriginalFile", "DestinationFile");
>
> Console.ReadLine();
> }
>
> public static void maClasse_FileCopyProgress(object sender,
> Library.FileCopyProgressArgs e) {
>
> Console.WriteLine(e.Pourcentage.ToString("##0.00%"));
> }
> }
> }
>
> A bientôt,
>
> --
> Pascal Belaud - Microsoft France
> OlyMars: SQL Server Centric .NET Code Generator
>
> http://www.microsoft.com/france/msdn/olymars
> http://www.olymars.net/latest.zip (interim build)
> http://blogs.msdn.com/olymars
> "Thierry Fierville" <remidubreuil@hotmail.com> wrote in message
> news:OJl4SeMnEHA.3396@tk2msftngp13.phx.gbl...
> > Bonjour,
> >
> > j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté
mon
> > IHM classique de type Winform et de l'autre une dll contenant un
ensemble
> de
> > classes regroupées en packages.
> > Je veux que mon IHM affiche la progression de mon traitement (par
exemple,
> > afficher dans un scrollbar le pourcentage de fichier parcouru ou le
> > pourcentage d'octets téléchargés) mais ce traitement s'effectue dans
> dll,
> > au fin fond d'une classe bien "à l'abri" dans son package (découplage
> > oblige).
> > D'un point de vue architecture objet, quelle est la meilleure pratique
> pour
> > propager ce genre d'information d'une classe fonctionnelle vers une
?
> >
> >
>
>
Ok, merci pour ta réponse détaillée qui confirme ce que je supposais être
solution, c'est à dire un delegate.
Maintenant, admettons que je doive à la fois abonner l'IHM (pour le
progressbar) et un autre objet de la classe toto au même événement pour
d'un côté, l'IHM actualise la progression et que, de l'aute côté, la
toto fasse un traitement lambda.
La solution que j'ai trouvé consiste à rendre l'événement static mais ça
pose évidemment un problème si on veut utiliser plusieurs instances
différentes de la classe MaClasse (déclarant le delegate) pour des
traitements différents, par exemple en multithread ou par exemple si dans
cas on veut que l'IHM réagisse mais pas dans un autre cas.
Je peux par exemple avoir besoin d'une classe de recherche de fichiers
déclarant un event pour lequel l'IHM affiche une progressbar, mais dans un
autre cas, avoir une classe utilisant cette même classe de recherche de
fichiers pour des besoins internes sans que l'IHM n'ait à réagir.
Quelle alternative au static dans ce cas là ?
"Pascal Belaud [MS]" wrote in message
news:uA%23E$
> Salut,
>
> Le mieux est de déclarer un delegate/évenement dans ta classe et que
> s'abonne ou pas à celui-ci. Il existe une best practice pour ceci. Voici
un
> exemple (je pars de la copie d'un fichier)
>
> using System;
>
> namespace Library {
>
> public delegate void FileCopyProgressEventHandler(object sender,
> FileCopyProgressArgs e);
>
> public class MaClasse {
>
> public event FileCopyProgressEventHandler FileCopyProgress = null;
>
> public void FileCopy(string originalFile, string destinationFile) {
>
> // Je simule une boucle sur la taille du fichier
> for (int i = 0; i < 1000000; i++) {
>
> if (FileCopyProgress != null) {
>
> FileCopyProgress(this, new FileCopyProgressArgs(Convert.ToSingle(i)
> Convert.ToSingle(1000000)));
> }
> }
> }
> }
>
> public class FileCopyProgressArgs : EventArgs {
>
> private float pourcentage = 0;
> public float Pourcentage {
>
> get {
>
> return(this.pourcentage);
> }
> }
>
> public FileCopyProgressArgs(float pourcentage) {
>
> this.pourcentage = pourcentage;
>
> }
> }
> }
>
> namespace IHM {
>
> public class MainClass {
>
> public static void Main() {
>
> Library.MaClasse maClasse = new Library.MaClasse();
> maClasse.FileCopyProgress += new
> Library.FileCopyProgressEventHandler(maClasse_FileCopyProgress);
>
> maClasse.FileCopy("OriginalFile", "DestinationFile");
>
> Console.ReadLine();
> }
>
> public static void maClasse_FileCopyProgress(object sender,
> Library.FileCopyProgressArgs e) {
>
> Console.WriteLine(e.Pourcentage.ToString("##0.00%"));
> }
> }
> }
>
> A bientôt,
>
> --
> Pascal Belaud - Microsoft France
> OlyMars: SQL Server Centric .NET Code Generator
>
> http://www.microsoft.com/france/msdn/olymars
> http://www.olymars.net/latest.zip (interim build)
> http://blogs.msdn.com/olymars
> "Thierry Fierville" wrote in message
> news:
> > Bonjour,
> >
> > j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté
mon
> > IHM classique de type Winform et de l'autre une dll contenant un
ensemble
> de
> > classes regroupées en packages.
> > Je veux que mon IHM affiche la progression de mon traitement (par
exemple,
> > afficher dans un scrollbar le pourcentage de fichier parcouru ou le
> > pourcentage d'octets téléchargés) mais ce traitement s'effectue dans
> dll,
> > au fin fond d'une classe bien "à l'abri" dans son package (découplage
> > oblige).
> > D'un point de vue architecture objet, quelle est la meilleure pratique
> pour
> > propager ce genre d'information d'une classe fonctionnelle vers une
?
> >
> >
>
>
Bonjour,
j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté mon
IHM classique de type Winform et de l'autre une dll contenant un ensemble
classes regroupées en packages.
Je veux que mon IHM affiche la progression de mon traitement (par exemple,
afficher dans un scrollbar le pourcentage de fichier parcouru ou le
pourcentage d'octets téléchargés) mais ce traitement s'effectue dans ma
au fin fond d'une classe bien "à l'abri" dans son package (découplage
oblige).
D'un point de vue architecture objet, quelle est la meilleure pratique
propager ce genre d'information d'une classe fonctionnelle vers une IHM ?
Bonjour,
j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté mon
IHM classique de type Winform et de l'autre une dll contenant un ensemble
classes regroupées en packages.
Je veux que mon IHM affiche la progression de mon traitement (par exemple,
afficher dans un scrollbar le pourcentage de fichier parcouru ou le
pourcentage d'octets téléchargés) mais ce traitement s'effectue dans ma
au fin fond d'une classe bien "à l'abri" dans son package (découplage
oblige).
D'un point de vue architecture objet, quelle est la meilleure pratique
propager ce genre d'information d'une classe fonctionnelle vers une IHM ?
Bonjour,
j'aimerais avoir votre avis sur la question suivante : j'ai d'un côté mon
IHM classique de type Winform et de l'autre une dll contenant un ensemble
classes regroupées en packages.
Je veux que mon IHM affiche la progression de mon traitement (par exemple,
afficher dans un scrollbar le pourcentage de fichier parcouru ou le
pourcentage d'octets téléchargés) mais ce traitement s'effectue dans ma
au fin fond d'une classe bien "à l'abri" dans son package (découplage
oblige).
D'un point de vue architecture objet, quelle est la meilleure pratique
propager ce genre d'information d'une classe fonctionnelle vers une IHM ?