Mahiouz
-
Modifié par Whismeril le 24/06/2015 à 10:58
Whismeril
Messages postés19029Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention26 avril 2024
-
24 juin 2015 à 15:38
Bonjour,
j'ai fait un petit programme qui sert a récupérée des données via un port série.
le programme doit fonctionner comme suit:
le transfert se faire par paquet de 100 caractère, le nombre total de boucle est de 1278,ce qui nous fait un transfert de 1278*100 octet environs.
private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
serialPort2.Write("\u000D");// lance la tach envoiFil
progressBar1.Value = 0;
if ( longueur_bytes_read <= 128977)
{
while (serialPort2.BytesToRead >0)
{
char[] buffer = new char[101]; // on crée un char de 255 caractere
longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length);
//int longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length); //lecture du buffer jusqu'a sa longeur buffer.Length
//tes characteres sont contenus dans buffer.
//on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.
for (int i = 0; i < longueur_bytes_read; i++)
{
value += buffer[i];
progressBar1.Value = ((longueur_bytes_read * 100 ) / 127800 * 100);
StatusLabel1.Text = progressBar1.Value.ToString() + "%" + "Télechargement en court...";
}
}
}
else
{
StatusLabel1.Text = "terminé";
}
}
j'ai ajoute une progressBar, mais qui ne s'incrémente pas.
je suis débutante en c#.
private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
serialPort2.Write("\u000D");// lance la tach envoiFil
if ( longueur_bytes_read <= 128977)
{
while (serialPort2.BytesToRead >0)
{
char[] buffer = new char[250]; // on crée un char de 255 caractere
longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length);
//int longueur_bytes_read = serialPort2.Read(buffer, 0, buffer.Length); //lecture du buffer jusqu'a sa longeur buffer.Length
//tes characteres sont contenus dans buffer.
//on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.
for (int i = 0; i < longueur_bytes_read; i++)
{
compteur ++;
value += buffer[i];
backgroundWorker1.RunWorkerAsync();
}
}
}
else
{
StatusLabel1.Text = "terminé";
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
progressBar1.Value = ((compteur * 100) / 100);
System.Threading.Thread.Sleep(100);
// StatusLabel1.Text = progressBar1.Value.ToString() + "%" + "Télechargement en court...";
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
StatusLabel1.Text = e.ProgressPercentage.ToString() + "%" + "Télechargement en court...";
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
StatusLabel1.Text = ("Télechargement Fini");
}
j'ai eu cette erreur
Opération inter-threads non valide : le contrôle 'progressBar1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
Whismeril
Messages postés19029Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention26 avril 2024656 24 juin 2015 à 15:34
J'ai encore corrigé ta coloration syntaxique, merci de lire la procédure que je t'ai indiquée dans ton premier message
As tu regardé la source?
Certe elle fait beaucoup d'autres choses que d'afficher une progressbar, mais le principe c'est que dans le dowork, tu fais ton travail (dans ton cas recevoir les données) toutes les n boucles (1% max) tu envoies un événement tu généres l'évenement progresschanged avec la méthode ReportProgress.
C'est cet évenement qui peut intéragir avec la progressbar, soit directement (même formulaire) soit au travers d'un Dispatcher (comme dans le cas de ma source)
Modérer m'amène à intervenir dans de nombreux posts, mais les seuls langages que je connaisses sont le C# et un peu de VB. Pour vos codes pensez à la coloration.
Réponse trouvée ->Question Résolue