Jump to content
getule

VB.NET le Multithreading plus simple avec le composant BackgroundWorker

Recommended Posts

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]


Edited by getule
erreur
  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




  • Posts

    • Certains missionnaires chrétiens s’acharnent à critiquer le mariage du prophète Mohamad (saws) avec Aïcha (ra). Nous avons beau à leur expliquer que ce genre de mariage était totalement légitime pour la société arabe du VIIè siècle, mais par mauvaise foi, ils s’obstinent à juger le prophète (sws), homme arabe du VIIè siècle avec une mentalité du XXIè siècle ! :   les petites chrétiennes se mariaient et avaient des rapports sexuels très tôt durant des siècles, des rapports qui seraient punis par la loi de nos jours. En France il a fallut attendre la Révolution et la rupture avec le christianisme pour que l’âge limite passe à 13 ans.   Maintenant si nous suivons le raisonnement de certains missionnaires chrétiens islamophobes, nous devrions considérer que tous les chrétiens étaient pédophiles, et que Jésus et Paul sont des complices de la pédophilie puisqu’ils n’ont pas condamné ces pratiques qui existaient à leur époque.   En réalité, ce qu’il faut retenir, c’est que ces mariages doivent être remis dans leur contexte historique. Les mentalités des premiers chrétiens ou ceux de l’Ancien Régime sont différentes de la mentalité que nous avons aujourd’hui, de même que la mentalité des arabes du VII siècle est différente de notre mentalité occidentale du XXI. Ce qui aujourd’hui nous choque, nous citoyens du XXI siècle, était dans d’autres époques légitime.         - Les romaines se mariaient et avaient des rapports sexuels à l’âge de 12 et moins, avant d’avoir les menstruations, avec des époux qui pouvaient être leurs grands pères.   - Vu qu’aucun écrit néotestamentaire ne condamne cette pratique, ni même pas Paul qui a donné des recommandations sur le mariage et la vie conjugale, les chrétiens ont continué à suivre ces coutumes.   - Le Concile de Trente convoqué par le Pape Paul III en 1542 confirme l’âge du mariage à 12 ans pour les filles. Pourquoi Abraham Boris Est-il Devenu Musulman? 04 https://www.youtube.com/watch?v=XmISzFles0E Pourquoi Abraham Boris Est-il Devenu Musulman? 05 https://www.youtube.com/watch?v=WlswWJpQZ9o
    • Bonsoir  je voudrais connaître mon nom d’utilisateur pour une première connexion sur agb online  j’ai essayé mon nom prénom c’est à dire  merabet nour el islam. Mais ça donne invalide  une possibilité ?  merci 
    • @basta oui la convention est active....mais elle est basée sur un prix "d'origine" qui n'existe pas ! on avait 35% de remise....c'etait ça la "convention" ! Maintenant fais le calcul, tu verras que tu ne gagnes presque rien par rapport a un abonné normal !!!! d'ou ma remarque qu'elle n'est plus d'actualité...
    • Pour ma part je paye toujour avec le prix conventionné je suis avec 4 mo je paye 2000 et quelque je sais plus 2200 je croix elmohim ma convetion et toujour active 
    • le cas est les equipes de la championnat a na pas de rendment  http://virtuelcampus.univ-msila.dz/inst-gtu
×
×
  • Create New...