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

    • السلام عليكم  هل من شرح لهذه الخاصية بارك الله فيكم
    • Salam @dzgeek123. Je compte bientôt prendre un ONT avec OMCI Manager, sûrement le LXT-010H-D (merci à @vezvez pour le conseil). Je m'intéresse aussi à un routeur qui gère bien le bufferbloat. Comme tu utilises un VSOL + GL.iNet Flint 2, j’imagine que tu l’as configuré avec SQM + CAKE ? Est-ce que tu pourrais faire ce test et partager ton résultat ? 👉 https://www.waveform.com/tools/bufferbloat Je suis surtout curieux de la latence en gaming, si tu as un retour d’expérience à ce niveau. Merci d’avance, ça m’aiderait beaucoup 
    • J'ai calculé le nb de guichets nécessaires pour la période estivale en Tunisie ; 5000 familles/j vont en tunisien. Si ça prend 10 min par famille d'échanger le bon contre des devises, il faudrait environ 90 guichets et les algériens sont connus mondialement pour être ultra efficace bien entendu   Même des randoms sur un forum peuvent estimer que ça pue et presque inapplicable 
    • Tu peux faire un bénéf si tu fais ça ; tu vas en Tunisie une seule journée, tu reviens en Algérie et tu revends ce que t'as. Après si le but est de faire baisser le cours de devise du taux non officiel, on devrait autoriser tous les algériens à acheter des devises s'ils le souhaitent, qu'ils partent ou non. c'est une mesure démago pour faire semblant de foutre quelque chose ; ils distribuent juste les dividendes du pétrole.  le vrai problème de ce truc, c'est plutôt l'application ; faut aller dans une banque classique donner des dinars en échange d'un bon, puis au niveau de l'aeroport etc... échanger le bon l'équivalent contre des devises. J'ai hâte de voir la gueule des bureaux à la frontière tunisienne quand y aura 200.000 algériens qui vont vouloir réclamer leur dû   on est bons pour 30 bonnes années de communisme hein, les boomix de l'indépendance ont une bonne espérance de vie machallah. Un libéral à la Milei ça arrivera certainement pas dans le Dzistan.
    • Je ne suis absolument pas contre des garde-fous, le soucis c'est les décisions qui n'ont ni tête ni queue comme celle interdisant aux citoyens de pouvoir faire le change si ils voyagent moins d'une semaine, ça n'a aucun sens! ça veux dire que si un algérien décide de prendre 6 jours de vacances en Espagne, il n'ouvre pas droit au change ? Pareil pour la décision de faire appel au pénal pour une histoire de change de moins de 750 euros.. c'est RIDICULE. A croire que c'est une subvention.. c'est DU CHANGE, on échange de l'argent contre de l'argent. J'aime reconnaitre les choses quand elles sont bien faites, mais la c'est juste ridicule. Il faut vraiment régler cette histoire de devises une bonne fois pour toute.
×
×
  • Créer...