Dans un menu "Lancer processus" mon client doit cliquer pour lancer un
série d'actions qui peuvent prendre plusieurs seconde.
La première de ces actions consistent à instancier une classe, et de
lancer une fonction membre qui peut prendre plusieurs secondes. La
condition de fin d'execution de la fonction est un membre qui prend pour
valeur true;
...
ClassTest maClass= new ClassTest();
maClass.fonction();
je suis sur que la fonction est terminée lorsque le membre state est
égale à true.
Comment utiliser un thread qui me permette donc d'instancier ma classe
et d'attendre jusqu'a ce que la fonction est terminée son calcul, c'est
à dire quand le membre .state est à true.
merci d'avance de me mettre sur la voie parceque je n'ai jamais utilisé
les thread, et tout ce que je trouve sur google est un peu trop complexe.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Whiplash
Salut,
Es-tu bien sur que ton champ booléen est thread safe ? Si tu comptes accéder à ce champ à partir d'un autre thread, il faut que ta classe mette en place un mécanisme d'accès concurrentiel à ce booléen (thread safe par volatile ou lock ou autre...)
puis un thread qui boucle sur ce champ, du genre :
delegate void DelegateInvoke();
private DelegateInvoke fInvokeStopAction;
//dans constructeur fInvokeStopAction = new DelegateInvoke(StopAction); Thread fThread = new Thread(new ThreadStart(Run));
protected override void StopAction() { // ce que tu veux... ... }
"mosto" a écrit dans le message de news: 46ac89a9$0$5088$
Bonjour j'ai une application Windows classique,
Dans un menu "Lancer processus" mon client doit cliquer pour lancer un série d'actions qui peuvent prendre plusieurs seconde. La première de ces actions consistent à instancier une classe, et de lancer une fonction membre qui peut prendre plusieurs secondes. La condition de fin d'execution de la fonction est un membre qui prend pour valeur true;
...
ClassTest maClass= new ClassTest(); maClass.fonction();
je suis sur que la fonction est terminée lorsque le membre state est égale à true.
Comment utiliser un thread qui me permette donc d'instancier ma classe et d'attendre jusqu'a ce que la fonction est terminée son calcul, c'est à dire quand le membre .state est à true.
merci d'avance de me mettre sur la voie parceque je n'ai jamais utilisé les thread, et tout ce que je trouve sur google est un peu trop complexe.
Salut,
Es-tu bien sur que ton champ booléen est thread safe ?
Si tu comptes accéder à ce champ à partir d'un autre thread, il faut que ta classe mette en place un mécanisme d'accès concurrentiel
à ce booléen (thread safe par volatile ou lock ou autre...)
puis un thread qui boucle sur ce champ, du genre :
delegate void DelegateInvoke();
private DelegateInvoke fInvokeStopAction;
//dans constructeur
fInvokeStopAction = new DelegateInvoke(StopAction);
Thread fThread = new Thread(new ThreadStart(Run));
protected override void StopAction()
{
// ce que tu veux...
...
}
"mosto" <mosto@select.com> a écrit dans le message de news: 46ac89a9$0$5088$ba4acef3@news.orange.fr...
Bonjour j'ai une application Windows classique,
Dans un menu "Lancer processus" mon client doit cliquer pour lancer un série d'actions qui peuvent prendre plusieurs seconde.
La première de ces actions consistent à instancier une classe, et de lancer une fonction membre qui peut prendre plusieurs
secondes. La condition de fin d'execution de la fonction est un membre qui prend pour valeur true;
...
ClassTest maClass= new ClassTest();
maClass.fonction();
je suis sur que la fonction est terminée lorsque le membre state est égale à true.
Comment utiliser un thread qui me permette donc d'instancier ma classe et d'attendre jusqu'a ce que la fonction est terminée son
calcul, c'est à dire quand le membre .state est à true.
merci d'avance de me mettre sur la voie parceque je n'ai jamais utilisé les thread, et tout ce que je trouve sur google est un peu
trop complexe.
Es-tu bien sur que ton champ booléen est thread safe ? Si tu comptes accéder à ce champ à partir d'un autre thread, il faut que ta classe mette en place un mécanisme d'accès concurrentiel à ce booléen (thread safe par volatile ou lock ou autre...)
puis un thread qui boucle sur ce champ, du genre :
delegate void DelegateInvoke();
private DelegateInvoke fInvokeStopAction;
//dans constructeur fInvokeStopAction = new DelegateInvoke(StopAction); Thread fThread = new Thread(new ThreadStart(Run));
protected override void StopAction() { // ce que tu veux... ... }
"mosto" a écrit dans le message de news: 46ac89a9$0$5088$
Bonjour j'ai une application Windows classique,
Dans un menu "Lancer processus" mon client doit cliquer pour lancer un série d'actions qui peuvent prendre plusieurs seconde. La première de ces actions consistent à instancier une classe, et de lancer une fonction membre qui peut prendre plusieurs secondes. La condition de fin d'execution de la fonction est un membre qui prend pour valeur true;
...
ClassTest maClass= new ClassTest(); maClass.fonction();
je suis sur que la fonction est terminée lorsque le membre state est égale à true.
Comment utiliser un thread qui me permette donc d'instancier ma classe et d'attendre jusqu'a ce que la fonction est terminée son calcul, c'est à dire quand le membre .state est à true.
merci d'avance de me mettre sur la voie parceque je n'ai jamais utilisé les thread, et tout ce que je trouve sur google est un peu trop complexe.
Gilles TOURREAU
Le Sun, 29 Jul 2007 14:35:51 +0200, mosto a écrit:
Bonjour j'ai une application Windows classique,
Dans un menu "Lancer processus" mon client doit cliquer pour lancer un série d'actions qui peuvent prendre plusieurs seconde. La première de ces actions consistent à instancier une classe, et de lancer une fonction membre qui peut prendre plusieurs secondes. La condition de fin d'execution de la fonction est un membre qui prend pour valeur true;
...
ClassTest maClass= new ClassTest(); maClass.fonction();
je suis sur que la fonction est terminée lorsque le membre state est égale à true.
Comment utiliser un thread qui me permette donc d'instancier ma classe et d'attendre jusqu'a ce que la fonction est terminée son calcul, c'est à dire quand le membre .state est à true.
merci d'avance de me mettre sur la voie parceque je n'ai jamais utilisé les thread, et tout ce que je trouve sur google est un peu trop complexe.
Etes-vous sur d'avoir besoin d'utiliser ce booléen ?
Car il existe plusieurs façons d'attendre la fin d'un thread sous .NET, sans faire de l'attente active... La première, la plus simple est de faire Thread.Join() sur votre Thread que vous voulez attendre. L'autre solution est d'utiliser un Mutex : - Votre Thread principal attend que ce mutex soit libérer. - Votre 2ème Thread execute la fonction et une fois terminé libère le Thread.
Cordialement
-- Gilles TOURREAU
S.A.R.L. P.O.S Le spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
Le Sun, 29 Jul 2007 14:35:51 +0200, mosto <mosto@select.com> a écrit:
Bonjour j'ai une application Windows classique,
Dans un menu "Lancer processus" mon client doit cliquer pour lancer un
série d'actions qui peuvent prendre plusieurs seconde.
La première de ces actions consistent à instancier une classe, et de
lancer une fonction membre qui peut prendre plusieurs secondes. La
condition de fin d'execution de la fonction est un membre qui prend pour
valeur true;
...
ClassTest maClass= new ClassTest();
maClass.fonction();
je suis sur que la fonction est terminée lorsque le membre state est
égale à true.
Comment utiliser un thread qui me permette donc d'instancier ma classe
et d'attendre jusqu'a ce que la fonction est terminée son calcul, c'est
à dire quand le membre .state est à true.
merci d'avance de me mettre sur la voie parceque je n'ai jamais utilisé
les thread, et tout ce que je trouve sur google est un peu trop complexe.
Etes-vous sur d'avoir besoin d'utiliser ce booléen ?
Car il existe plusieurs façons d'attendre la fin d'un thread sous .NET,
sans faire de l'attente active...
La première, la plus simple est de faire Thread.Join() sur votre Thread
que vous voulez attendre.
L'autre solution est d'utiliser un Mutex :
- Votre Thread principal attend que ce mutex soit libérer.
- Votre 2ème Thread execute la fonction et une fois terminé libère le
Thread.
Cordialement
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Sun, 29 Jul 2007 14:35:51 +0200, mosto a écrit:
Bonjour j'ai une application Windows classique,
Dans un menu "Lancer processus" mon client doit cliquer pour lancer un série d'actions qui peuvent prendre plusieurs seconde. La première de ces actions consistent à instancier une classe, et de lancer une fonction membre qui peut prendre plusieurs secondes. La condition de fin d'execution de la fonction est un membre qui prend pour valeur true;
...
ClassTest maClass= new ClassTest(); maClass.fonction();
je suis sur que la fonction est terminée lorsque le membre state est égale à true.
Comment utiliser un thread qui me permette donc d'instancier ma classe et d'attendre jusqu'a ce que la fonction est terminée son calcul, c'est à dire quand le membre .state est à true.
merci d'avance de me mettre sur la voie parceque je n'ai jamais utilisé les thread, et tout ce que je trouve sur google est un peu trop complexe.
Etes-vous sur d'avoir besoin d'utiliser ce booléen ?
Car il existe plusieurs façons d'attendre la fin d'un thread sous .NET, sans faire de l'attente active... La première, la plus simple est de faire Thread.Join() sur votre Thread que vous voulez attendre. L'autre solution est d'utiliser un Mutex : - Votre Thread principal attend que ce mutex soit libérer. - Votre 2ème Thread execute la fonction et une fois terminé libère le Thread.
Cordialement
-- Gilles TOURREAU
S.A.R.L. P.O.S Le spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
ginoo
Moi j'ai un probleme au niveau de mon application qui doit récuperer une page web dans un thread.
private void ThreadMethod() { PageWeb maPageWeb = new PageWeb(); while (!maPageWeb.getState()) { //MessageBox.Show(maPageWeb.getState().ToString()); Thread.Sleep(500); } MessageBox.Show(monIP.getIP()); }
public class pageWeb { private string sPage; private bool state; WebBrowser wbPage = new WebBrowser();
public pageWeb() { state = false; wbPage.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbDocumentCompleted); wbPage.Navigate("http://www.monsite.com/page.php"); }
void wbPage_DocumentCompleted(object sender, wbDocumentCompletedEventArgs e) { sPage = wbPage.DocumentText; if (sPage.Length > 0) state = true; }
public bool getState() { return state; }
public string getPage() { return sPage; } } }
Mon problème est que mon application boucle sans jamais m'afficher le contenu de la page. Sauf quand je décommente la ligne MessageBox.Show(maPageWeb.getState().ToString()); Là je récupère bien le contenu de la page
Moi j'ai un probleme au niveau de mon application qui doit récuperer une
page web dans un thread.
private void ThreadMethod()
{
PageWeb maPageWeb = new PageWeb();
while (!maPageWeb.getState())
{
//MessageBox.Show(maPageWeb.getState().ToString());
Thread.Sleep(500);
}
MessageBox.Show(monIP.getIP());
}
public class pageWeb
{
private string sPage;
private bool state;
WebBrowser wbPage = new WebBrowser();
public pageWeb()
{
state = false;
wbPage.DocumentCompleted += new
WebBrowserDocumentCompletedEventHandler(wbDocumentCompleted);
wbPage.Navigate("http://www.monsite.com/page.php");
}
void wbPage_DocumentCompleted(object sender,
wbDocumentCompletedEventArgs e)
{
sPage = wbPage.DocumentText;
if (sPage.Length > 0)
state = true;
}
public bool getState()
{
return state;
}
public string getPage()
{
return sPage;
}
}
}
Mon problème est que mon application boucle sans jamais m'afficher le
contenu de la page. Sauf quand je décommente la ligne
MessageBox.Show(maPageWeb.getState().ToString());
Là je récupère bien le contenu de la page
private void ThreadMethod() { PageWeb maPageWeb = new PageWeb(); while (!maPageWeb.getState()) { //MessageBox.Show(maPageWeb.getState().ToString()); Thread.Sleep(500); } MessageBox.Show(monIP.getIP()); }
public class pageWeb { private string sPage; private bool state; WebBrowser wbPage = new WebBrowser();
public pageWeb() { state = false; wbPage.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbDocumentCompleted); wbPage.Navigate("http://www.monsite.com/page.php"); }
void wbPage_DocumentCompleted(object sender, wbDocumentCompletedEventArgs e) { sPage = wbPage.DocumentText; if (sPage.Length > 0) state = true; }
public bool getState() { return state; }
public string getPage() { return sPage; } } }
Mon problème est que mon application boucle sans jamais m'afficher le contenu de la page. Sauf quand je décommente la ligne MessageBox.Show(maPageWeb.getState().ToString()); Là je récupère bien le contenu de la page