‫Bon retour et cette vidéo, nous allons examiner les tâches et plus particulièrement lorsque vous travaillez avec l'UPF,
‫créons donc un nouveau projet et utilisons WP F ici et je vais appeler un double.
‫Vous avez des tâches.
‫Et dans mon cas, appuyez sur OK pour créer ce projet et dans ma connaissance de l'interface utilisateur à un bouton.
‫Et je vais le faire via la boîte à outils.
‫Je vais donc simplement sélectionner un bouton et le faire glisser dans mon interface utilisateur afin de l'agrandir un
‫peu.
‫Et changeons la taille de la police en 32, peut-être quelque chose comme ça.
‫C'est maintenant un peu plus facile à lire et je vais lui donner un nom.
‫Le nom est égal à mon bouton car je veux l'utiliser plus tard dans mon code derrière.
‫Très bien, c'est donc l'interface utilisateur pour le moment.
‫Nous allons ajouter un petit navigateur Web plus tard, mais pour l'instant, le bouton ira bien.
‫Et dans ma fenêtre principale, je veux utiliser ce bouton, mais je dois donc cliquer sur événement.
‫Donc, chaque fois que quelqu'un clique sur ce bouton, je veux télécharger quelque chose sur le Web
‫et une fois le téléchargement terminé, je veux attribuer le TEMEL au texte du bouton au contenu du bouton et j'ai donc besoin d'un événement
‫de clic.
‫Je vais donc double-cliquer sur le bouton et cela créera un nouvel événement de clic sur mon bouton ici.
‫Cette méthode va donc être déclenchée chaque fois que nous cliquons sur le bouton.
‫Et le moyen le plus simple de voir si c'est vrai est d'utiliser simplement une boîte de message et de dire quelque chose comme bonjour ou cela a
‫fonctionné ou quelque chose comme ça.
‫Maintenant, exécutons-le juste pour voir que notre code fonctionne réellement, car avant de faire quoi que ce soit d'autre, enregistrons simplement le bouton
‫qui fonctionne et il dit bonjour.
‫D'accord, c'est bien.
‫Maintenant, comme vous pouvez le voir, le texte lui-même n'est pas vraiment aussi gros que le texte du bouton.
‫Ce n'est pas joli, mais ce n'est pas le sujet de cette vidéo, n'est-ce pas ?
‫Il s'agit de tests et de téléchargement de quelque chose en arrière-plan pendant que l'interface utilisateur n'est pas bloquée.
‫D'accord.
‫Alors trouvons un moyen de le bloquer.
‫Alors allons-y et essayons quelque chose comme le téléchargement.
‫Et pour télécharger quelque chose, je vais juste utiliser un client HTTP et je vais appeler un client
‫Web.
‫Maintenant, le client BTP est une classe que nous devons ajouter au système.
‫Et j'ai pensé que HTP, c'est ce dont nous avons besoin ici.
‫Donc ce client Web maintenant, ce sera une nouvelle page client GTP.
‫Et maintenant, je veux avoir une chaîne, qui sera le HTML, qui sera le
‫client Web dot obtenir une chaîne asynchrone et quelle chaîne ira bien, elle devrait obtenir la colonne https barre oblique
‫Google dot com et je veux avoir le résultat de cela.
‫Alors téléchargez le site Web et donnez-moi le résultat et stocké en HTML.
‫C'est donc ce que cette chose va faire.
‫Droit.
‫Et ce que je vais voir, c'est le fil sur lequel je suis.
‫Je veux donc voir le fil sur lequel je travaille.
‫La ligne de droite sera le numéro de fil et le point de fil et pour utiliser le fil, nous en avons besoin.
‫Utilisez le threading système, et pour utiliser Deba, nous devons utiliser les diagnostics standard du système.
‫Faisons donc ces deux choses et maintenant nous pouvons aller de l'avant et obtenir le fil actuel et l'ID du fil MENAGED.
‫Donc, je veux juste savoir ce que j'ai fait comme fil sur lequel je cours actuellement.
‫Ainsi, lorsque je clique sur le bouton, ce débogage sera imprimé et il téléchargera quelque chose.
‫Maintenant, disons que je veux changer le contenu du bouton, donc mon bouton ce contenu pour utiliser quelque chose comme fait.
‫Alors testons ça.
‫Nous y sommes.
‫Une fois que j'ai cliqué sur le bouton, vous pouvez voir maintenant que c'est fait.
‫Je l'ai téléchargé et c'est fait.
‫Et cela se produit parce que celui-ci ici, donc le téléchargement du compte Google fonctionne assez rapidement, et c'est pourquoi il
‫est même possible de faire le contenu Ekwall fait, mais généralement cela ne devrait pas être possible, ou dans la plupart des cas, ce
‫ne sera pas possible , car cette tâche ici prend généralement un certain temps.
‫Et nous avons un fil ici qui est assez, oui, assez lourd parce que le téléchargement de trucs prend généralement un certain
‫temps.
‫Et sauf que c'est très, très peu que nous téléchargeons dans ce cas, nous téléchargeons
‫juste un site Web Google dot com, ce qui est très, très court.
‫C'est juste quelques kilo-octets.
‫Donc, à la place, je ne vais pas télécharger un fichier de cinq mégaoctets.
‫C'est donc un peu plus long jusqu'à ce que tout cela soit fait.
‫Alors vérifions-le à nouveau.
‫Je vais appuyer sur le bouton et maintenant vous voyez qu'il se fige.
‫Et seulement une fois que cela a été fait, cela a changé pour Dunn.
‫Alors peut-être que le fichier de vingt-cinq mégaoctets est trop petit.
‫Créons le fichier de 200 mégaoctets et vérifions s'il y en a un sur le site Web et qu'il y en a un.
‫Très bien, essayons à nouveau.
‫Maintenant, le fichier sera beaucoup plus volumineux et il faudra un certain temps pour le faire.
‫Alors j'appuie sur le bouton.
‫Et comme vous pouvez le voir maintenant, il gèle, il est gelé et il n'a rien jusqu'à ce que les téléchargements soient
‫terminés.
‫Et c'est parce que nous sommes sur le troisième.
‫Ainsi, tout l'écran est gelé jusqu'à ce que le téléchargement soit terminé.
‫Et c'est quelque chose de très dangereux.
‫Vous ne devriez pas faire ça.
‫Vous devez toujours être prudent lorsque vous faites des choses lourdes sur la menace principale ou sur le fil de l'interface utilisateur, car
‫la menace principale ou la menace de l'interface utilisateur est vraiment là.
‫Occupé à mettre à jour l'interface utilisateur, il en va de même pour tous les éléments de l'interface utilisateur.
‫Eh bien, maintenant mon fichier sur mon programme est à peu près gelé.
‫Donc je vais juste utiliser le fichier de cent mégaoctets.
‫C'est peut-être un meilleur choix et ce que nous avons fait et nous verrons toujours la différence.
‫Droit.
‫Je viens donc d'utiliser ici un lien où vous pouvez simplement télécharger des fichiers aléatoires.
‫Alors pressons-le à nouveau.
‫Comme vous pouvez le voir maintenant, il est gelé et cela prendra un peu de temps avant que ce soit fait.
‫Et vous y êtes.
‫C'est fait.
‫Il a donc téléchargé le fichier et c'est OK.
‫Et verriez-vous aussi que nous courons sur la menace numéro un, c'est donc la principale menace, n'est-ce pas ?
‫Et nous courons sur la menace principale et nous essayons de télécharger quelque chose et nous essayons de mettre à
‫jour l'interface utilisateur et.
‫Eh bien, c'est pourquoi cela prend un peu de temps ici.
‫Alors maintenant, vous pourriez dire, d'accord, créons une tâche pour le faire.
‫Créons donc une tâche qui s'exécute et nous allons exécuter du code ici.
‫Donc je vais juste copier le code comme ça.
‫Et maintenant, déboguons cela.
‫Ajoutons donc un petit point de débogage ici.
‫Alors allons-y et déboguons cela juste pour voir quels threads sont réellement impliqués.
‫Alors je vais appuyer sur le bouton et ça y est, on est à l'intérieur de ce fil.
‫Et que nous le sommes, nous avons donc plusieurs threads de travail où la menace principale, qui est la menace, et nous
‫l'avons vu plus tôt lorsque nous avons exécuté quelque chose.
‫Donc, si la menace principale et ensuite nous exécutons notre tâche, qui a également une menace, et nous sommes dans la menace
‫cinq.
‫Vous pouvez donc voir que la menace cinq est une menace pour les travailleurs, et c'est celle que nous avons ici.
‫Passons donc à l'étape suivante.
‫On est toujours à l'exécution ou toujours une menace, cinq, alors on recommence, toujours une menace cinq.
‫Maintenant, nous essayons de faire quelque chose.
‫Nous essayons donc de mettre à jour mon bouton.
‫Terminé.
‫Et revenons à l'étape suivante, comme vous pouvez le voir, mon application gèle son expression d'évaluation, mon
‫bouton.
‫Alors on attend encore.
‫Donc assez lourd pour cela et comme vous pouvez voir que nous sommes dans cette opération, l'exception au thread appelant
‫ne peut pas accéder à l'objet car un thread différent le possède.
‫Qu'est-ce que ça veut dire?
‫Eh bien, cela signifie que mon bouton appartient à un fil différent.
‫Et par quel fil ?
‫Eh bien, il appartient au fil d'interface utilisateur, qui est notre fil principal.
‫Ainsi, le thread principal est chargé de s'occuper de tous les éléments de l'interface utilisateur afin qu'ils ne se bloquent pas.
‫Il est important que vous répondiez toujours et dans ce cas, il ne répond plus car nous
‫essayons d'accéder à cette ligne de code même si elle n'est pas dans le bon thread.
‫Nous sommes donc dans le thread cinq et nous essayons d'accéder à quelque chose qui appartient au thread un et c'est quelque chose
‫qui n'est pas valide.
‫Nous obtenons donc ici cette exception d'opération non valide et nous devons trouver une solution différente pour gérer cela.
‫Et c'est généralement un concept de différentes menaces.
‫Donc en général, il faut être prudent quand on travaille avec des threads différents et avec des objets différents.
‫Si les objets appartiennent à d'autres threads, vous ne pouvez pas les changer ou les modifier.
‫C'est donc quelque chose dont vous devez être conscient.
‫Alors comment pouvons-nous faire cela?
‫Eh bien, généralement, arrêtons d'abord le haut et passons au bouton, par conséquent, et créons un bouton ici.
‫Et je veux vérifier le bouton en appuyant sur le contrôle ou en maintenant le contrôle et en appuyant sur le bouton.
‫Ainsi, le bouton hérite de la base du bouton, qui est un contrôle constant, qui hérite du contrôle, de l'élément
‫du framework, de l'élément de l'interface utilisateur.
‫Qui est un objet visuel, qui est un objet de dépendance, un objet répartiteur que nous sommes, donc c'est
‫un objet répartiteur et ici, il vérifie simplement l'accès et l'accès très fougueux.
‫Il s'agit donc d'un objet répartiteur et nous utilisons ici un répartiteur et le répartiteur contient de nombreuses variables,
‫événements, etc.
‫Pourquoi je te montre ça ?
‫Eh bien, c'est parce que nous utiliserons le répartiteur afin de gérer notre fil pour eux.
‫Mon bouton.
‫Alors, que dois-je faire ici ?
‫Eh bien, j'ai besoin de mon répartiteur de boutons pour que les fenêtres soient menaçantes.
‫Répartiteur Les fenêtres du système cessent de menacer cet objet répartiteur auquel est associé.
‫Alors maintenant, nous découvrons quel fil appartient à notre bouton ou en fait à quel Fred.
‫Notre bouton appartient.
‫Vérifions donc le répartiteur et ici, j'invoque exécute l'action spécifiée de manière asynchrone sur le
‫thread, les fenêtres système auxquelles ce répartiteur est associé.
‫C'est donc exactement ce dont je parlais, ce que nous devons faire.
‫Alors allons-y et exécutons le code ici maintenant.
‫Donc je vais le fermer en bas là.
‫Et maintenant, vous pouvez voir que maintenant pouvez aller de l'avant et dire, OK, le contenu de mon bouton dit simplement terminé
‫et je vais utiliser à nouveau le débogage afin de voir dans quelle menace je suis à ce stade.
‫Exécutons donc à nouveau le code.
‫Maintenant, appuyons sur le bouton.
‫Et comme vous pouvez le voir, nous sommes ici maintenant.
‫Et j'allais avoir besoin d'évaluer encore une fois pour que nous soyons donc nous sommes dans le fil cinq maintenant.
‫C'est là que nous effectuons le débogage.
‫Ensuite, nous passons au fil suivant ou à la ligne suivante.
‫Ligne suivante.
‫Et puis l'interface utilisateur est de retour sur la bonne voie.
‫Où ici.
‫Et maintenant, nous pouvons passer à l'étape suivante.
‫Nous sommes donc dans le répartiteur et il saute par-dessus ce que je voulais vous montrer.
‫Voyons donc cela, allons dans Windows et voyons la console de débogage, qui est la sortie pour que nous soyons en train de
‫dire la menace numéro cinq.
‫Et puis il a dit menace numéro un.
‫C'est donc la menace numéro un et c'est la menace numéro cinq.
‫Ainsi, le propriétaire du bouton, comme vous pouvez le voir, est la menace numéro un.
‫Et pour que cela soit un peu plus clair, nous pourrions ajouter cela à notre ligne ici.
‫La menace numéro un ou la menace numéro un tel possède mon bouton.
‫Alors maintenant, nous allons être un peu plus clair.
‫Exécutons-le à nouveau et il devrait alors s'afficher correctement.
‫Voici donc la sortie et il n'y a encore rien d'intéressant.
‫Nous appuyons sur le bouton et vous voyez que la menace numéro cinq a été exécutée, puis elle commence à se télécharger.
‫Et un, c'est pas une fois que c'est fait, ça dit ici menace.
‫Personne ne possède mon bouton.
‫Alors appuyons à nouveau.
‫Et maintenant, comme vous pouvez le voir, le bouton fonctionne toujours et il est toujours en cours de mise à jour.
‫Alors c'est bien.
‫Et c'est une façon de le faire.
‫Il existe un autre moyen, cependant, et je vais vous en montrer un autre, qui est une solution préférée.
‫Je vais donc copier ça.
‫Mon clic sur le bouton.
‫Je vais l'appeler mon clic sur le bouton juste pour que cela n'interfère pas.
‫Et maintenant je vais dire à quelle menace je suis dehors.
‫Alors ici, quelle menace suis-je lorsque je clique sur le bouton ?
‫Eh bien, je devrais être en rouge alors.
‫Je vais utiliser une tâche de poids.
‫Exécuter cette tâche devrait être une tâche asynchrone.
‫Nous devons donc ajouter un mot-clé asynchrone ici.
‫Un studio visuel n'est toujours pas très heureux.
‫Je dois donc rendre cette méthode asynchrone.
‫Donc, il y a mon clic sur le bouton maintenant sera une méthode de bouton asynchrone qui attendra une tâche spécifique pour
‫s'exécuter de manière asynchrone.
‫Et ce que je fais ici, c'est que je télécharge simplement à nouveau ce fichier.
‫Et au lieu d'utiliser un répartiteur, ce que je peux faire maintenant, c'est mettre à jour mon bouton en dehors de cette
‫tâche.
‫Alors je vais le faire dehors ici.
‫Je vais dire le contenu de mon bouton et il va dire quelque chose que j'ai téléchargé.
‫C'est ça.
‫Alors maintenant, au lieu de le faire avec un répartiteur, ce qui était un peu compliqué, je le rends asynchrone.
‫Donc maintenant, ça devrait bien fonctionner aussi.
‫Maintenant, afin de tester cela, je vais changer la méthode ici pour cliquer sur la méthode pour cliquer sur le bouton.
‫Sinon, cette méthode ne serait jamais exécutée.
‫Alors faisons-le.
‫Et c'est peut-être aussi ajouter sur quel fil nous sommes.
‫Donc fil non résolu avant une tâche en attente.
‫Et puis celui-ci est après une tâche de poids et celui-là sera pendant une tâche de poids.
‫Alors maintenant, exécutons-le à nouveau.
‫Appuyons sur notre bouton.
‫Et ici vous voyez avant TASC.
‫Il n'y avait personne alors pendant une tâche de poids qui était le fil numéro deux et après la tâche de poids, c'est à nouveau au
‫numéro un et nous avons terminé le téléchargement.
‫C'est donc une approche différente qui fonctionne parfaitement bien aussi.
‫Et c'est encore mieux.
‫Vous n'avez donc pas à suivre la voie du contrôle, ce qui menaçait le mien.
‫Mais vous créez un fil différent où vous faites des choses.
‫Mais et vous en faites aussi un poids.
‫Donc, vous le rendez asynchrone.
‫Maintenant, un petit quelque chose que je veux aussi vous montrer est un navigateur Web, donc ce que je vais faire
‫ici, c'est réduire la taille du bouton.
‫Je vais le mettre ici dans le coin supérieur gauche et je vais utiliser un navigateur Web.
‫Je vais juste le faire glisser là-dedans et le rendre un peu plus grand.
‫Alors maintenant, nous aurons juste ce navigateur Web et il devrait nous montrer de quel côté nous sommes.
‫Donc, ce qui se passera, c'est que chaque fois que j'appuierai sur le bouton, je téléchargerai un site Web
‫spécifique, que je définirai manuellement.
‫C'est donc juste un petit exemple pour ajouter à ce que nous avons vu jusqu'à présent.
‫Je ne vais pas entrer dans un navigateur Web complet.
‫Je ne vais pas vous montrer comment faire.
‫Vous pouvez aller de l'avant et essayer vous-même.
‫Je vais juste vous montrer comment vous pouvez maintenant utiliser ce code HTML que
‫vous avez téléchargé à partir de ce lien spécifique, qui est codé en dur et simple à utiliser ou à afficher dans un navigateur Web.
‫Alors https Google point com.
‫Donc, ce qui se passera, c'est que chaque fois que j'appuierai sur le bouton, Google dot com sera téléchargé.
‫Maintenant, pour ce faire, j'ai besoin d'une méthode spécifique et je ne vais pas la taper manuellement.
‫Je vais juste le copier et le coller ici.
‫Ainsi, cette méthode sur le changement HTML sera appelée chaque fois qu'une propriété de dépendance sera modifiée.
‫Donc, ce que je vais dire ici, c'est que le changement HTML a besoin d'un objet de dépendance et d'un argument d'événement
‫de changement de propriété de dépendance, appelé E ici.
‫Je crée juste un navigateur Web qui va prendre cet objet de dépendance et l'utiliser comme navigateur Web.
‫Et puis, si le navigateur Web n'est pas nul, naviguez jusqu'à une chaîne spécifique, qui sera la nouvelle valeur en tant
‫que chaîne.
‫Ainsi, quels que soient ces arguments de dépendance, propriété modifiée, les arguments d'événement le sont.
‫C'est de là que je tire la ficelle.
‫C'est donc à peu près ce qui doit être affiché sur le navigateur Web.
‫Donc je l'aurais fait facilement d'une manière plus facile.
‫Mais le problème, c'est que ce n'est pas si facile à faire.
‫Il n'y a donc pas de moyens plus faciles ou de nombreux moyens plus faciles de le faire.
‫C'est donc généralement l'approche que vous devriez faire ici.
‫Ainsi, au lieu de simplement mettre à jour le bouton avec le téléchargement de Dan, je souhaite mettre à jour le navigateur Web et, par conséquent, le navigateur
‫Web a besoin d'un nom.
‫Je vais donc donner un nom au navigateur Web et je vais l'appeler mon navigateur Web.
‫Maintenant, le navigateur Web, je vais l'appeler ici ou en fait modifié ici.
‫Ce que je veux faire, c'est définir la valeur de ce navigateur et je veux le définir avec quelque chose.
‫Et vous pouvez voir que nous avons besoin de la propriété de dépendance et d'un objet de valeur.
‫Alors, comment puis-je obtenir cela?
‫D'où je tiens ça ?
‫Eh bien, il y a plusieurs, plusieurs choses ici.
‫L'un d'eux est que nous avons besoin d'une propriété de dépendance, alors créons-en une.
‫Mettons-le en haut ici.
‫Et encore une fois, je vais juste le copier et le coller.
‫Je vais vous montrer à quoi ça ressemble et à quoi ça sert.
‫Il s'agit donc d'une propriété de dépendance en lecture seule appelée propriété HTML.
‫Et nous nous inscrivons.
‫Il sera enregistré avec HTML.
‫Comme vous pouvez le voir, il a besoin d'un nom, d'une chaîne, d'un nom, d'un code HTML, puis d'un type de propriété, d'un type de propriétaire et de
‫métadonnées de propriété.
‫C'est donc quelque chose que nous avons abordé lorsque nous travaillons avec les propriétés de dépendance dans le chapitre UPF.
‫Alors ici, je viens de créer avec HTML.
‫Le type est c'est une chaîne.
‫Quel est le propriétaire.
‫C'est la fenêtre principale.
‫Donc notre classe ici.
‫Et de quel type de données s'agit-il ou quelles métadonnées dois-je lui donner et je lui donne les métadonnées
‫modifiées en html.
‫Alors qu'est-ce que cela signifie.
‫Eh bien, chaque fois que nous définissons la propriété sur HTML, le changement sera appelé et c'est cette méthode ici qui sera
‫appelée.
‫Alors maintenant, ce que nous pouvons faire, c'est définir la valeur de mon navigateur avec ce qui suit.
‫Nous pouvons aller de l'avant et dire la propriété HTML et la définir avec HTML afin d'utiliser HTML.
‫Nous devons faire une petite solution de contournement ici ou avoir une petite solution de contournement.
‫En fait, je vais l'appeler mon HTML comme ça et j'ai besoin de créer une variable ici,
‫qui va être une chaîne mon T et L qui va juste dire blabla, juste une chaîne qui est avec du texte stupide dans ici.
‫Rien de spécial.
‫Mais une fois le téléchargement terminé, nous obtenons le résultat dans notre chaîne HTML.
‫Je ne pouvais pas simplement dire HTML ici car cette chaîne est créée localement et je ne peux pas la créer
‫ou elle entre dans le cadre de notre tâche ici et je ne peux pas la créer à l'extérieur.
‫C'est pourquoi j'ai besoin de cette petite solution de contournement pour pouvoir continuer et dire que mon HTML est du HTML.
‫Donc ça.
‫Variable ici, qui est dans le champ d'application de notre navigateur Web, nous l'avons dit ici, c'est pourquoi je peux continuer maintenant
‫et le définir ici.
‫Donc, dans le cadre de notre tâche d'attente.
‫Maintenant, bien sûr, nous devons terminer cette ligne.
‫C'est ainsi que vous pouvez définir la valeur d'un navigateur Web.
‫D'accord, c'est un peu de travail, mais ça marche, alors testons-le, exécutons notre code.
‫Appuyons sur le bouton.
‫Et nous le sommes, nous avons donc beaucoup d'erreurs de script, mais c'est parce que nous n'avons rien dit d'autre.
‫Mais comme vous pouvez le voir ici, nous sommes maintenant chez Google, nous pouvons donc accéder aux images, à Google Maps et ainsi de suite.
‫Alors maintenant, nous avons créé notre petit navigateur, qui nous amène simplement à Google.
‫D'accord, cool.
‫Donc, comme je l'ai dit, je ne vais pas aller trop loin dans les navigateurs et tout ça, et je ne voulais même pas
‫aller trop loin dans ces sujets.
‫Mais c'est juste la façon dont vous devez le configurer.
‫C'est un peu, euh, ouais.
‫Une petite mise en place que vous devez faire.
‫Vous devez donc avoir cette méthode.
‫Vous devez avoir cette propriété de dépendance, puis vous pouvez définir la valeur de votre
‫navigateur avec la propriété HTML, qui est notre propriété de dépendance et du code HTML, qui est le code d'origine que nous
‫téléchargeons à partir de Google dot com.
‫Ou je viens rapidement pour résumer encore une fois, quelle est l'idée d'utiliser différents threads ?
‫Eh bien, vous avez la principale menace qui gère l'interface utilisateur et si vous voulez faire quelque chose de
‫lourd donc qui prend un peu de temps à faire, par exemple, télécharger à partir du Web, par exemple, copier quelque chose d'un
‫fichier à un autre ou travailler avec disques durs ou autre, c'est ce qui a vraiment du sens de le
‫faire en arrière-plan.
‫Vous créez donc une tâche différente ou un fil différent qui s'en occupe.
‫Nous avons donc créé ici une tâche asynchrone qui le fait en arrière-plan.
‫Et une fois que c'est fait, on peut aller de l'avant avec le reste.
‫Cela ne va donc pas geler notre fil principal.
‫Notre interface utilisateur fonctionnera toujours correctement, et c'est de cela qu'il s'agit.
‫D'accord.
‫Alors rendez-vous dans le.