Afficher “veuillez patienter” boîte de message
Je veux montrer une "please wait" boîte de message alors que mon formulaire principal est de faire une tâche de longue durée. Comme pour mon cas, la tâche longue est la transmission d'un protocole série. Ci-dessous mon code:
public void transmitprotocol()
{
try
{
MessageBox.Show("Please wait. Uploading logo.", "Status");
//Transmitting protocol coding here. Takes around 2 minutes to finish.
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
}
J'ai essayé la méthode ci-dessus à l'aide de MessageBox comme le codage ci-dessus, mais j'ai toujours l'avoir à fermer la MessageBox seulement il va commencer à transmettre protocole.
Existe t'il une méthode que je peux faire pour encore montrer le "please wait" MessageBox tout de transmettre le protocole?
OriginalL'auteur Coolguy | 2012-09-20
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de faire l'opération coûteuse sur un thread d'arrière-plan. Pour cela, utiliser un BackgroundWorker ou la nouvelle Parallélisation de la Bibliothèque (.NET 4 et ainsi de suite).
Fait, vous avez besoin pour fermer la boîte de dialogue parce qu'il bloque l'exécution jusqu'à ce que vous, eh bien, fermez-la. Ce que vous faites est que vous démarrez l'opération, puis afficher la boîte de dialogue, puis, une fois l'opération terminée, vous fermez la boîte de dialogue.
Maintenant, si vous êtes en utilisant WPF je vous suggère fortement de ne pas utiliser une Boîte de Dialogue et d'utiliser plutôt un Indicateur De, c'est gratuit, assez facile à utiliser et pas si moche que la Boîte de Message.
EDIT: Maintenant que vous spécifiez que vous êtes à l'aide de WinForms, puis aller de l'avant, de mettre en œuvre l'arrière-plan a fonctionné et, pourquoi pas, une fenêtre transparente sans chrome dont le but est de montrer une longue étiquette. Une fois le fond travailleur se termine, vous fermez cette fenêtre.
merci tim. Correction de l'.5 bug 🙂
Vous êtes les bienvenus. Bonne réponse par la manière - je voulais m'assurer de l'OP (ou quelqu'un d'autre lecture) savaient qu'ils pouvaient utiliser le Parallèle des trucs à partir de 4.0 🙂
Merci pour l'idée Randolf R-F. Mais avez-vous de l'exemple de codage sur BackgroundWorker application qui est similaire à mon cas?
Suivez le lien sous BackgroundThread, vous y trouverez de la documentation officielle avec un exemple complet, y compris l'annulation de soutien pour le thread d'arrière-plan.
OriginalL'auteur Erre Efe
Vous devez préparer un backgroundworker et l'utilisation d'un formulaire windows à la place de MessageBox.
Quelque chose comme ceci aussi simple qu'un copier/coller:
Créer de nouvelles Fenêtres Formulaire et définissez l'étiquette ( et si vous avez besoin d'un bouton annuler), puis de l'utiliser à la place de Form1. Ce nouveau Formulaire s'utilise comme un MessageBox forme
Merci Hamid. J'ai créé un Form2 pour le "veuillez patienter" message. Mais il y a un autre problème. Quand je clique sur le bouton pour transmettre le protocole, il ne s'exécute pas. Il montre le "veuillez patienter" message pour une deuxième puis fermez par lui-même. Aucun protocole n'avait été transmis. Quel est le problème?
Écrivez votre vérification de codes dans le vide bw_DoWork(object sender, DoWorkEventArgs e)
Je l'ai essayé et il semble comme si vous mettez try{}catch{} énoncé dans le vide bw_DoWork, il ne peut pas exécuter. Il ne sera exécuté après je prends le try{}catch{} déclaration.
OriginalL'auteur Hamid
La façon la plus simple pour ce faire est d'ouvrir le splash avec show()
Ouvrez le formulaire souhaité et de le transmettre à une instance de la splash forme dans le constructeur:
Ajouter ce code à votre formulaire constructeur:
Pour moi, il a échoué dans le form_load, mais il a travaillé dans le constructeur. Assurez-vous que votre travail est fait (par exemple, db charge) avant la clôture de la WaitWindow.
OriginalL'auteur Tom The Teacher