Rechercher : dans
Par :

Thread en c#

Dernière réponse le 9 jui 2007 à 22:41:31 moi411, le 8 jui 2007 à 19:20:58 
 Signaler ce message aux modérateurs

Bonsoir tout le monde,
Je viens de faire iun programme visant à récupérer dans une textbox, tous les chemin des fichiers texte de mon disque dur au fur et à mesure de la recherche, un peu comme le programme de recherche sous windows (la finalité étant de faire un programme complet de recherche de fichiers).

En expérimentant mon programme je me suis appeçu que mon thread ne fonctionne pas... Il n'affiche rien pourtant il appelle bien la bonne fonction!

Tout ce que je veux ici, c'est afficher le répertoire ou l'ordinateur cherche pendant qu'il affiche les fichiers dans une listview, d'ou l'utilité du thread (si j'ai bien compris!).

Ci-joint le code, en espérant que quelqu'un va m'aider...
Merci d'avance et à bientôt.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;


namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}




//déclaré ici car besoin dans AfficherChemin() (voir Thread)
string nomFichier;


private void button1_Click(object sender, EventArgs e)
{
//rep ou commencer la recherche
DirectoryInfo rep = new DirectoryInfo(@"C:\");

//Thread servant à afficher les fichier trouvé par Chercher(rep);
Thread t = new Thread(new ThreadStart(AfficherChemin));
t.Name = "TChemin";
t.Start();

//fonction de recherche (récurcive)
Chercher(rep);
}



public void Chercher(DirectoryInfo Rep)
{
//récupère le chemin complet du fichier
nomFichier=Rep.FullName;

//dans le répertoire courant on cherche tous les fichiers
//dont l'extension est .txt
foreach (FileInfo f in Rep.GetFiles("*.txt"))
{
//et on on crée un item avec les chemeins et tailles de ces fichiers
//item qui sera ajouté à la listview
ListViewItem it = new ListViewItem();
it.Text = f.FullName;
it.SubItems.Add(f.Length.ToString());
listView1.Items.Add(it);
}


//si il y a des sous répertoires on rappelle "Chercher();" (principe de la récursivité)
DirectoryInfo[] a = Rep.GetDirectories();
foreach (DirectoryInfo b in a)
{
Chercher(b);
}
}



//le thread appelle cette fonction qui affiche
//dans une textBox multiligne, tous les chemins
//des fichier texte sur un disque (C:).
public void AfficherChemin()
{
while (true)
{
textBox1.Text = nomFichier;
Thread.Sleep(0);
}
}

}
}

Configuration: Windows XP
Visual Studio 2005

Meilleures réponses pour « Thread en c# » dans :
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Les structures en langage C VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...

1

moi411, le 9 jui 2007 à 22:35:57
  • +2

Au cas ou qqun aurait besoin de cette réponse, je connais qqun qui a finalement pu m'aider et donc je mais le code fonctionnel, à tous hasards...


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


//délégation servant à afficher dans la textbox
delegate void AjoutTextBoxText(string Texte);
public void AjoutTextBox(string Texte)
{
textBox1.Text = Texte;
}

//Même chose avec la listview
delegate void AjoutListViewItem(string chem, string taille);
public void AjoutListView(string chem, string taille)
{
ListViewItem it = new ListViewItem();
it.Text = chem;
it.SubItems.Add(taille);
listView1.Items.Add(it);
}

private void button1_Click(object sender, EventArgs e)
{
//rep ou commencer la recherche
DirectoryInfo rep = new DirectoryInfo(@"C:\");

//Thread servant commencer la recherche
Thread t = new Thread(new ThreadStart(AfficherChemin));
t.Name = "TChemin";
t.Start();
}


public void Chercher(DirectoryInfo Rep)
{
try
{
//récupère le chemin complet du dossier où se trouve le fichier
AjoutTextBoxText ajoutText = new AjoutTextBoxText(AjoutTextBox);
Invoke(ajoutText, new object[] { Rep.FullName });

//récupère le nom du fichier ainsi que sa taille
AjoutListViewItem ajoutItem = new AjoutListViewItem(AjoutListView);

//dans le répertoire courant on cherche tous les fichiers
//dont l'extension est .txt
foreach (FileInfo f in Rep.GetFiles("*.txt"))
{
Invoke(ajoutItem, new object[] { f.FullName, f.Length.ToString() });
}
}
catch { }

try
{
//si il y a des sous répertoires on rappelle "Chercher();" (principe de la récursivité)
DirectoryInfo[] a = Rep.GetDirectories();
foreach (DirectoryInfo b in a)
{
Chercher(b);
}
}
catch { }

}


//le thread appelle cette fonction qui cherche les fichiers texte sur un disque (C:).
public void AfficherChemin()
{
DirectoryInfo rep = new DirectoryInfo(@"C:\");
Chercher(rep);
}
}

Répondre à moi411

2

 moi411, le 9 jui 2007 à 22:41:31
  • +2

Eh bien en fait la solution définitive se trouve dans le message ci-avant, je n'ai pas fais attention en écrivant et donc j'ai oublié de préciser que c'était fini...
Bref la bonne réponse est juste au-dessus, désolé!!!

Répondre à moi411