IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Task et annulation


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Débutant
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Débutant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Points : 87
    Points
    87
    Par défaut Task et annulation
    Bonjour a tous et toutes,

    Je suis en train de me faire un datagridview personnel sur lequel je filtre les lignes et je souhaite qu'un thread d'arrière plan mette à jour les couleur des cellules en fonction de la nature de la source. Cela marche parfaitement si l'utilisateur attend la fin du thread avant de refiltrer les lignes.

    Du coup j'aimerais, pouvoir annuler le thread pour le recommencer avec les nouvelles données. Mais tout ce que j'ai essayé jusqu'à présent ne fonctionne pas. Du coup j'ai besoins de votre aide pour m'aiguiller. Merci de votre aide

    Voici mon code j'ai laissé des commentaire pour ce qui me semble être le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    private void Data_FilteredChanged(object sender, List<Mark> e)
    {
    	DataSource = null;
    	Rows.Clear();
     
    	var bindingList = new BindingList<Mark>(_data.FilteredData);
    	var source = new BindingSource(bindingList, null);
     
    	SuspendLayout();
    	ClearSelection();
    	DataSource = source;
    	ResumeLayout(true);
     
    	Task.Run( () => ColorCells(); ); //Fait planter si le thread n'est pas encore arreté si cette fonction est rappellé
    }
     
    public void ColorCells()
    {
    	//Si Data_FilteredChanged a été appelé avant la fin de la fonction tout le reste planter
    	// le mark dans le foreach se retrouve à null et la suite plante
     
    	if ( Rows.Count == 0 )
    		return;
     
    	CtrlrCheck ctlCheck = new CtrlrCheck();
     
    	Mark mark;
    	foreach ( DataGridViewRow row in Rows ) //TODO : Parrallele foreach
    	{
    		mark = Rows[ row.Index ].DataBoundItem as Mark;
    		mark.Chk = ctlCheck.GetCheck( mark );
     
    		if ( InvokeRequired )
    		{
    			if ( mark == null )
    				break;
     
    			BeginInvoke( (MethodInvoker)delegate
    			{
    				row.Cells[ 0 ].Style.BackColor = row.Cells[ 0 ].Style.SelectionBackColor = CheckColor( row, mark );
    				row.DefaultCellStyle.ForeColor = ColorParticular( mark );//FIXME : Ne color pas les markpages particulier...				
    			} );
    		}
    	}
    }
    Merci pour l'aide

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Tu peux utiliser un CancellationToken par exemple.
    https://learn.microsoft.com/en-us/do...k-cancellation

    Ou plus basique, un bon bool global des familles, que tu testes dans ta boucle pour savoir s'il faut sortir prématurément de la boucle.
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. [Event]Annuler la fermeture d'une application
    Par willowII dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 16/11/2004, 09h28
  2. [VB.NET] Pb avec le bouton Annuler d'1 barre de progression
    Par dada1982 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2004, 09h56
  3. Annuler des transactions
    Par sgire dans le forum ASP
    Réponses: 2
    Dernier message: 04/05/2004, 09h31
  4. Annuler une suppression
    Par Harbaingan dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/04/2003, 14h59
  5. Réponses: 5
    Dernier message: 04/04/2003, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo