Merci de lire mon Dernier message en bas du thread, Changement complet de sujet.
Merci de lire mon Dernier message en bas du thread, Changement complet de sujet.
La balise [ CODE][ /CODE] existe
Le programme ne plante pas mais reste bloquer car il n'y a qu'un seul Thread et que tu lui demandes de se figer (Sleep d'un seconde)
Il faut jouer avec soit un timer, soit creer un autre thread
Salut,
Ton programme ne plante pas à proprement parlé.
C'est surtout que tu lances une boucle infinie sur le thread principal de ton application et qu'une fois lancé tu ne peux plus interagir sur l'interface.
A mon sens le mieux serait d'utiliser la classe background worker.
Tu trouveras un tutoriel sur l'utilisation de cette classe ici:
http://webman.developpez.com/article...ckroundworker/
Tu disposes également d'un exemple concret ici
Bonne chance.
MvK
Essaye un truc comme ça mais j'ai pas testé.
Et c'est la première fois que j'essaye d'aider kkun alors te fie pas trop a moi ;D
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public int i; public BackgroundWorker bgwboucle; public void bgwboucle_Dowork(object sender, DoWorkEventArgs e) { int o = 0; do{ o++; UIUpdaterDelegate delegate1 = delegate { nbcycle.Text = Convert.ToString(o); }; nbcycle.Invoke(delegate1); // Label affiche nombre de cycle effectué Thread.Sleep(1000); // Pause: 1Sec } while (this.i == 1); } private void launch_Click(object sender, EventArgs e) { this.i = 1; if(!this.bgwboucle.IsBusy) { this.bgwboucle.RunWorkerAsync(); } } private void stop_Click(object sender, EventArgs e) { this.i = 0; } this.bgwboucle.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bgwboucle_DoWork);
Et le while ?
la variable i ne varie jamais... donc boucle infinie... pas la peine de sortir l'artillerie lourde avec le BackgroundWroker ! (En tous cas, pas de suite).
Suggestion :
au lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part while (o < i);
À priori, effectivement l'utilisation d'un timer serait largement plus approprié !
Code : Sélectionner tout - Visualiser dans une fenêtre à part while (i == 1);
Je penses que la boucle infini c'est le but recherché.Et le while ?
la variable i ne varie jamais... donc boucle infinie... pas la peine de sortir l'artillerie lourde avec le BackgroundWroker !
D'où l'utilisation d'un autre thread via BgW,ce qui me semble le plus propre. Après je peux me planter.
Si on reste dans le main thread impossible de mettre à jour le label avec le nombre d’occurrences de cycle, sauf si on utilise l'Application.doEvents() ce qui serait, à mon sens, fort peu subtil.
MvK
Ben il a 2 boutons il dit. Un qui lance la boucle l'autre qui l'arrête
Le premier bouton fixe this.i a 1 et lance le backgroundworker qui tourne temps qu'on click pas sur le bouton stop qui passe this.i à 0
C'est sur on doit pouvoir faire mieux mais dans le principe ça devrais marcher non ?
Bonjour.
Un truc simple pour commencer et pour comprendre :
PS : préférer les méthodes proposées précédemment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 private bool bContinue; public void boucle () { int o = 0; do{ o = o + 1; nbcycle.Text = Convert.ToString(o); // Label affiche nombre de cycle effectué System.Threading.Thread.Sleep(1000); // Pause: 1Sec } while (bContinue); } private void launch_Click(object sender, EventArgs e) { bContinue = true; boucle(); } private void stop_Click(object sender, EventArgs e) { bContinue = false; }
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
Bon ben, L'interface n'etant pas obligatoire (vu que c'est un petit logiciel qui tourne sans l'aide de personne)
je suis passer a une appli console.
J'ai donc reussi ma boucle avec le timer etc
Maintenant le probleme qui se presente c'est que j'ai eu l'idée d'utiliser Directory.Move pour Deplacer les Dossier
Sauf qu'avec cette commande, on ne peux transferer des dossiers d'un endroit a un autre du MEME disque dur.
Code: [Sélectionner]
Variables:
dans le main:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 string Dossier1 = @"Z:\Soft_**\***_***\Desktop"; string Dest1 = @"C:\serv\";
Erreur affiché:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Directory.Move(Dossier1,Dest1);
Le chemin d'accès source et celui de destination doivent avoir des racines identiques. Le déplacement n'est pas possible entre ces volumes.
Je me retrouve bloqué sur 'Comment deplacer les dossiers D'un PC a un serveur (via reseau). (Z = serveur // C = Local).
P.s (les etoiles sur les chemins, c'est juste de la censure.)
Une solution
Directory.Copy(source,destination)
Directory.Delete(source)
Pourquoi faire simple quand on peut faire compliquer
dans un try catch ca peut etre utile
Directory.Copy N'existe pas![]()
ou du moins mon Visual Studio ne me le propose pas.
Edit: en regardant sur le net, il y aurait une alternative a Directory.Copy
Ce serait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 private void XCopy(string dir1, string dir2) { string[] files = Directory.GetFiles(dir1); foreach (string f in files) { File.Copy(f, dir2 + f.Substring(dir1.Length), true); } string[] dirs = Directory.GetDirectories(dir1); foreach (string d in dirs) { XCopy(d, dir2 + d.Substring(dir1.Length)); }
Sauf que quand je met cette fonction Dans ma class
Mon main ne reconnait pas Xcopy, je n'arrive pas a utiliser la fonction, pourquoi ?
incompréhensible ton Thread!!
Nouveau sujet = Nouveau thread
Problème d'accès, tu appels surement ta méthode depuis une méthode static.
Essai avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part private static void XCopy(...)
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
Partager