Ralentir instruction, procecessus

Signaler
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
-
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011
-
Bonjour,

Dans mon application je lis un fichier stocké sous forme de byte array :
byte[] MydocAlire = (byte[]) méthode qui récupère le fichier stocké dans la base

FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
fs.Write(docAlire, 0, MydocAlire.Length);
fs.Flush();
fs.Close();
System.Diagnostics.Process process = new System.Diagnostics.Process();

process.StartInfo.FileName = fileName;
process.Start();
process.Close();
System.IO.File.Delete(fileName);

Quand j'exécute l'application n'arrive pas à ouvrir le fichier (erreur fichier endommagé?)
En mode debug , j'ai constaté que le processus essaye d'ouvrir le fichier avant qu'il ne soit pas correctement écrit sur le disque.
Comment faire pour faire attendre le processus un peu pour que le fichier soit totalement écrit sur le disque méthode qui récupère le fichier stocké dans la base

12 réponses

Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

je te conseille la lecture de ce lien qui devrait sans doute répondre à la question "comment attendre x secondes?", mais je ne suis pas sur que ce soit la meilleure façon de faire...

Nul ne devient grand par la guerre...
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
quand je fais Myprocess. il me propose pas la méthode sleep
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

c'est parce que tu as mal lu le prototype de la methode...
qui est, je te le rappelle:

public static void Sleep(
    int millisecondsTimeout
)


Nul ne devient grand par la guerre...
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
oui pour faire attendre mom processus 30ms
je doit faire Myprocess.sleep(30);

or la methode sleep n'est proposé dans la liste Myprocess. pour pouvoir le choisir
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

non...
la méthode est une méthode statique, c'est à dire qu'elle n'est pas lancé depuis une instance de la classe mais depuis la classe elle même.
ou pour résumer,
il faut que tu fasse
thread.sleep(30); dans ta méthode et non Myprocess.sleep(30);

revois la définition des méthodes statiques, c'est un conseil...

Nul ne devient grand par la guerre...
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
comment faire le lien entre Myprocess qui va se charger d'ouvrir le fichier et thread?
quand je fait

System.Threading.Thread.Sleep(1000); ca va endormir Myprocess?
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

J'aimerais savoir si tu as pris le temps de lire la doc (le lien de mon premier message...)
que je t'ai filé...
parce que la réponse à ta question est donnée dedans...

Nul ne devient grand par la guerre...
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
D'après ce que j'ai compris je fais:
Thread newThread =
new Thread(new ThreadStart(MYprocess.start()));

newThread.sleep(1000);
?
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

...

c'est pourtant simple...

FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
fs.Write(docAlire, 0, MydocAlire.Length);
fs.Flush();
fs.Close();
System.Diagnostics.Process process = new System.Diagnostics.Process();

Thread.sleep(1000);

process.StartInfo.FileName = fileName;
process.Start();
process.Close();
System.IO.File.Delete(fileName);


tu sais ce que c'est qu'une méthode statique?

Nul ne devient grand par la guerre...
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
Oui collègue je sais ce que c'est une methode statique
On peut l'appeler sans faire une instanciation de la classe au quelle elle apartient.
Ce que je ne comprenais pas ce tous d'un coup on commence de parler de Thread sans que je vois aucun lien entre mon processus et la classe thread.
Qui permet de dire que si je fait Thread.sleep() ca endormi mon process
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

ca endort le thread courant, c'est marqué dans la doc que je t'ai filé...

Nul ne devient grand par la guerre...
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
le thread courant qui correspond dans ton cas, à celui dans lequel s'exécute ton programme.

Comme Miltiades l'a dit au début, cette méthode est un peu barbare mais efficace...

Sinon tu pourrais utiliser un timer, non? plus propre MAIS un peu plus compliqué


________________________________________________The possible meet the impossible to become the possimpible !!