Aller au contenu
Règlement du forum ×
IPTV et arnaques ×

VB.NET le Multithreading plus simple avec le composant BackgroundWorker


getule

Messages recommandés

Le composant BackgroundWorker du framework .net permet d’utiliser un "multithreading" facilement. source http://forum.diafdz.com/yaf_postsm24_Comment-travailler-avec-un-BackgroundWorker-vb-net.aspx#post24

prenons un exemple utile.

durant le temps de la connexion à la base de donnée d'un LoginForm, celle ci parait bloquée (Freeze de l'interface utilisateur).

au lieu d'utiliser un multithreading, voyons cela avec le BackgroundWorker.

Nous allons utiliser une ProgressBar pour faire patienter l'utilisateur durant la connexion à la base.

connex.jpg

 


[left][color=#000000][font=Consolas]Public username, password, tt As String ' Déclarons  username et pasword et une valeur tt comme des string[/font][/color]
[color=#000000][font=Consolas]    Public c As Boolean 'déclarons c comme booléen[/font][/color]

[color=#000000][font=Consolas]Private Sub LoginForm2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load[/font][/color]
[color=#000000][font=Consolas]        Me.ProgressBar1.Visible = False 'mettons la progressbar en mode invisible au chargement de la loginform[/font][/color]


[color=#000000][font=Consolas]'évènement du bouton Ok[/font][/color]
[color=#000000][font=Consolas]    Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click[/font][/color]

[color=#000000][font=Consolas]        Me.ProgressBar1.Visible = True  'mettons la progressbar visible[/font][/color]
[color=#000000][font=Consolas]        username = Me.UsernameTextBox.Text [/font][/color]
[color=#000000][font=Consolas]        password = PasswordTextBox.Text[/font][/color]

[color=#000000][font=Consolas]        Me.BackgroundWorker1.RunWorkerAsync() 'lançons le composant BackgroundWorker en mode asynchrone[/font][/color]

[color=#000000][font=Consolas]    End Sub[/font][/color]

[color=#000000][font=Consolas]    Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click[/font][/color]
[color=#000000][font=Consolas]        Me.Close()[/font][/color]
[color=#000000][font=Consolas]    End Sub[/font][/color]


[color=#000000][font=Consolas]'c'est ici dans la procédure de l'évènement DoWork qu'on va se connecter à la base [/font][/color]
[color=#000000][font=Consolas]    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork[/font][/color]
[color=#000000][font=Consolas]        Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)[/font][/color]


[color=#000000][font=Consolas]        Dim Ds = New MonDataSet  'création de l'objet dataset[/font][/color]
[color=#000000][font=Consolas]        Dim BS = New BindingSource 'création d'un BindingSource [/font][/color]

[color=#000000][font=Consolas]        Dim maTA = New MonDataSetTableAdapters.MatableTableAdapter 'Création d'un table adapter [/font][/color]
[color=#000000][font=Consolas]        maTA.FillByUsernameAndMp(Ds.Matable, username, password) ' Appel de ma requête FillByUsernameAndMp créée auparavant. [/font][/color]
[color=#000000][font=Consolas]       BS.DataSource = Ds.Matable 'liaison de mon bindingsource[/font][/color]

[color=#000000][font=Consolas]        If BS.Current Is Nothing Then  'Si mon binding source ne contient aucune valeur malgrés le lancement de la requête filtrée (username et mot de passe), [/font][/color]
[color=#000000][font=Consolas]            e.Cancel = True    'on arrête le travail du Backgroundwork  [/font][/color]
[color=#000000][font=Consolas]            tt = "ERREUR D'IDENTIFICATION" [/font][/color]
[color=#000000][font=Consolas]            c = False  'on affecte la valeur "false" à c qu'on récupérera ultérieurement[/font][/color]

[color=#000000][font=Consolas]            Exit Sub[/font][/color]
[color=#000000][font=Consolas]        Else[/font][/color]
[color=#000000][font=Consolas]'sinon, on affecte la valeur "true"à c qu'on récupérera ultérieurement[/font][/color]
[color=#000000][font=Consolas]            c = True[/font][/color]
[color=#000000][font=Consolas]     BackgroundWorker1.Dispose() 'on termine le travail du backgroundWorker[/font][/color]
[color=#000000][font=Consolas]        End If[/font][/color]

[color=#000000][font=Consolas]    End Sub[/font][/color]
[color=#000000][font=Consolas]' lançons la progressbar en mode asynchrone[/font][/color]
[color=#000000][font=Consolas]    Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged[/font][/color]
[color=#000000][font=Consolas]        Me.ProgressBar1.Value = e.ProgressPercentage[/font][/color]

[color=#000000][font=Consolas]    End Sub[/font][/color]
[color=#000000][font=Consolas]' procédure de l'évènement RunWorkerCompleted ( quand le travail est treminé)[/font][/color]
[color=#000000][font=Consolas]    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted[/font][/color]

[color=#000000][font=Consolas]        If c = False Then  'c est la travaille avec la baleur c booléen, ici on n est pas connecté[/font][/color]
[color=#000000][font=Consolas]            Me.Label1.Text = tt[/font][/color]
[color=#000000][font=Consolas]            Me.ProgressBar1.Visible = False[/font][/color]
[color=#000000][font=Consolas]            Exit Sub[/font][/color]
[color=#000000][font=Consolas]        Else[/font][/color]

[color=#000000][font=Consolas]            Form1.Show() 'on est connecté on passe à l'autre form[/font][/color]
[color=#000000][font=Consolas]            Me.Close() [/font][/color]
[color=#000000][font=Consolas]        End If[/font][/color][/left]


Modifié par getule
erreur
  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • Messages

    • et aussi acheter un module SFP+ avec, que @fam a mentionner en haut    je pense qu'il faut attendre un peut pour voire si AT va proposer des solutions (modem ou autre chose) qui offre des portes 2.5gbE. j'ai vu une video de la recent expo des produits Condor, et parmi leur produit, il y avait des modem/router...vous en pensez quoi? 
    • Je reposte sur ce sujet dédié, offre 1.2Gbps :   Oui, A.T fait un travail incroyable depuis trois ans, je sais que certaines personnes ici ne vont pas aimer ça mais c’était l’une des priorités du président, il a insisté pour accélérer la couverture fibre dans le pays et sur les vitesses que nous obtenions qui étaient misérables, les gens se précipitent souvent pour critiquer quand quelque chose va mal mais jamais quand quelque chose va bien, même si nous avons souffert pendant longtemps, les choses changent et comme nous le disons, il vaut mieux tard que jamais, bon travail A.T & le Président (Je n’aime pas la politique mais c’était la seule chose qui a attiré mon attention dans ses promesses et j’encourageais cela pour être honnête).
    • @popmpopm de mémoire la convention MEN c'est max 300 megas... Au delà ça n'existe même pas.... Du moins en en janvier c'était le cas 
    • bienvenu @HABIB81  rak ca va kho ? @popmpopm  qui accepte AT ? 🤣 "je taquine  non kho, c'est lui meme qui changer son ONT d'origine de AT par un alta labs avec un port SFP+qui  a configuré ,, je crois que c'etai l'un des premier ...  puis moi et salah et d'autre encore,, l'époque on ne le connaissais pas... il ce fais tres discrète...  mais AT ne va jamais configuré un ONT en dor des leur ONT "fibrehome ZTE, alcatel nokia, huawei" 'ce que je j'ai dit dans un precedent poste '    
    • oui la convention de la ministère de l'éducation est une arnaque 
×
×
  • Créer...