Méthodes asynchrones et threads
Samy17
-
WarthogDJ Messages postés 216 Statut Membre -
WarthogDJ Messages postés 216 Statut Membre -
Bonjour,
Bonjour à tous,
J'ai un programme qui nécessite un chargement de données relativement lourd et qui prends donc un petit temps (environ 2 minutes). Évidemment, durant ce chargement toute mon appli se retrouve bloquée et je ne peux même plus réduire la fenêtre.
Bref, ce que je voudrai c'est exécuté tout le chargement en fond puis être alerté quand celui-ci est terminé.
Tout d'abord j'essaie de m'en tenir à débloqué l'appli durant l'exécution de cette tâche. En cherchant un peu partout sur le Web, j'ai mis ce code en place :
Code :
Cela ne fonctionne que partiellement car après avoir démarré la Task t1, la fonction dans laquelle ce code se trouve continue de s'exécuter jusqu'à la fin.
Cool Sauf qu'ensuite mon application reste tout de même bloquée...
Merci d'avance pour votre aide
Bonjour à tous,
J'ai un programme qui nécessite un chargement de données relativement lourd et qui prends donc un petit temps (environ 2 minutes). Évidemment, durant ce chargement toute mon appli se retrouve bloquée et je ne peux même plus réduire la fenêtre.
Bref, ce que je voudrai c'est exécuté tout le chargement en fond puis être alerté quand celui-ci est terminé.
Tout d'abord j'essaie de m'en tenir à débloqué l'appli durant l'exécution de cette tâche. En cherchant un peu partout sur le Web, j'ai mis ce code en place :
Code :
Action<object> action = (object obj) =>
{
Application.Current.Dispatcher.BeginInvoke(new Action(() => { test(); }));
};
Task t1 = new Task(action, "alpha");
t1.Start();
Cela ne fonctionne que partiellement car après avoir démarré la Task t1, la fonction dans laquelle ce code se trouve continue de s'exécuter jusqu'à la fin.
Cool Sauf qu'ensuite mon application reste tout de même bloquée...
Merci d'avance pour votre aide
A voir également:
- Méthodes asynchrones et threads
- Dans le document à télécharger, léa a utilisé 2 méthodes différentes pour centrer le nom des continents. lesquels sont centrés correctement ? - Forum C
- C'est quoi threads sur instagram - Accueil - Guide réseaux sociaux
- Calcul 8 threads excel ✓ - Forum Excel
- Threads - Guide
- Fichier Excel très très lent ✓ - Forum Excel
1 réponse
new Thread(MaMethode).Start();
Autrement tu peux aussi instancier ton thread.
Si tu veux modifier quelque chose sur ta form (pour avertir) il faut utiliser un delegate https://www.microsoft.com/en-us/download/details.aspx?id=55984
Autre chose tu peut aussi utiliser un tube nommé pour faire communiquer un thread avec un autre.
Pas utile je pense dans ton cas mon bon a savoir.
Autrement tu peux aussi instancier ton thread.
Si tu veux modifier quelque chose sur ta form (pour avertir) il faut utiliser un delegate https://www.microsoft.com/en-us/download/details.aspx?id=55984
namespace CrossThreadDemo
{
public class Form1 : Form
{
// This delegate enables asynchronous calls for setting
// the text property on a TextBox control.
delegate void SetTextCallback(string text);
//_____________________________________________
Puis tu écris ta méthode dans ta classe,...
//_____________________________________________
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
Autre chose tu peut aussi utiliser un tube nommé pour faire communiquer un thread avec un autre.
Pas utile je pense dans ton cas mon bon a savoir.