C# Ne Pas Mettre À Jour Le Texte De L'Étiquette
J'ai le code suivant:
private void button1_Click(object sender, EventArgs e)
{
var answer =
MessageBox.Show(
"Do you wish to submit checked items to the ACH bank? \r\n\r\nOnly the items that are checked and have the status 'Entered' will be submitted.",
"Submit",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1);
if (answer != DialogResult.Yes)
return;
button1.Enabled = false;
progressBar1.Maximum = dataGridView1.Rows.Count;
progressBar1.Minimum = 0;
progressBar1.Value = 0;
progressBar1.Step = 1;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if ((string) row.Cells["Status"].Value == "Entered")
{
progressBar1.PerformStep();
label_Message.Text = @"Sending " + row.Cells["Name"].Value + @" for $" + row.Cells["CheckAmount"].Value + @" to the bank.";
Thread.Sleep(2000);
}
}
label_Message.Text = @"Complete.";
button1.Enabled = true;
}
Ceci est un test, je suis de la création de port à ma demande. Tout fonctionne bien, mais le label_Message.texte en cours de jeu. Il n'apparaît jamais à l'écran. Il est en cours de définition, j'ai fait une console.écrire sur elle pour vérifier. Ce n'est pas l'actualisation de l'écran. Je reçois le "Terminer" à la fin aussi.
Quelqu'un a des idées?
OriginalL'auteur ErocM | 2011-04-15
Vous devez vous connecter pour publier un commentaire.
Vous effectuez une opération longue sur le thread d'INTERFACE utilisateur. Vous devez la déplacer à un thread d'arrière-plan (via
BackgroundWorker
par exemple) de sorte que le thread d'INTERFACE utilisateur peut faire des choses comme repeindre l'écran en cas de besoin. Vous pouvez tricher et d'exécuterApplication.DoEvents
, mais je vous recommande vraiment contre elle.Cette question et la réponse sont fondamentalement ce que vous demandez:
Le formulaire ne Répond Pas lors de toute autre opération effectuée en C#
OriginalL'auteur Adam Sills
utiliser l'Étiquette.Refresh(); il permet d'économiser beaucoup de temps.Cela devrait fonctionner pour u
OriginalL'auteur user3389579
L'Étiquette n'a pas re-peindre jusqu'à ce que vous donner le thread d'INTERFACE utilisateur de retour de la boucle de message. Essayez De L'Étiquette.D'actualisation, ou mieux encore, essayez de mettre votre opération longue dans un thread d'arrière-plan que d'autres affiches ont suggéré.
OriginalL'auteur Jollymorphic
Cette opération est exécutée dans le thread de l'INTERFACE utilisateur. L'INTERFACE utilisateur de ne pas mettre à jour jusqu'à la fin. Pour faire la mise à jour lors de l'envoi, vous devez effectuer l'envoi dans un thread séparé et mise à jour de l'étiquette à partir de là
OriginalL'auteur MadBender
Cela se produit généralement quand vous faites le calcul intensif/itérations dans le même thread que l'endroit où les éléments de l'interface utilisateur sont en cours d'exécution. Pour contourner cela, vous allez avoir besoin d'avoir un thread séparé de travail et à partir de là, la mise à jour de l'étiquette de la valeur en conséquence. J'avais poster une source complète de l'échantillon, mais je suis loin de ma machine de dev pour le moment.
OriginalL'auteur enriquein