‫Welkom terug en deze video, we gaan kijken naar taken en specifiek bij het werken met de UPF, laten we
‫daarom een nieuw project maken en laten we WP F hier gebruiken en ik ga een dubbel noemen.
‫Je hebt taken.
‫En in mijn geval, laten we dan op OK drukken om dat project en in mijn UI-kennis met een knop te maken.
‫En dat ga ik doen via de toolbox.
‫Dus ik ga gewoon een knop selecteren en deze naar mijn gebruikersinterface slepen, zodat we hem een beetje groter gaan
‫maken.
‫En laten we de lettergrootte veranderen in 32, misschien zoiets.
‫Nu is het een beetje makkelijker te lezen en ik ga het een naam geven.
‫Naam is gelijk aan mijn button omdat ik die later in mijn code erachter wil gebruiken.
‫Oké, dus dat is de gebruikersinterface voor nu.
‫We gaan later een kleine webbrowser toevoegen, maar voorlopig komt de knop goed.
‫En in mijn hoofdvenster wil ik die knop gebruiken, maar ik moet daarom op gebeurtenis klikken.
‫Dus wanneer iemand op die knop klikt, wil ik iets van internet downloaden en
‫als het klaar is met downloaden, wil ik de TEMEL aan de knoptekst toewijzen aan de knopinhoud en daarom heb ik een
‫klikgebeurtenis nodig.
‫Dus ik ga dubbelklikken op de knop en het zal hier een nieuwe my button click-gebeurtenis maken.
‫Deze methode wordt dus geactiveerd wanneer we op de knop klikken.
‫En de gemakkelijkste manier om te zien of dat waar is, is door gewoon een berichtvenster te gebruiken en iets als hallo te zeggen of
‫het werkte of iets dergelijks.
‫Laten we het nu uitvoeren om te zien dat onze code echt werkt, want voordat we iets anders doen, laten we de knop
‫opslaan werken en er staat hallo.
‫Oké, dat is prima.
‫Zoals u kunt zien, is de tekst zelf niet zo groot als de knoptekst.
‫Dat is niet mooi, maar daar gaat deze video niet over, toch?
‫Het gaat om testen en het gaat om het downloaden van iets op de achtergrond terwijl de gebruikersinterface niet vastloopt.
‫Oke.
‫Dus laten we een manier vinden om het vast te zetten.
‫Dus laten we doorgaan en iets proberen als downloaden.
‫En om iets te downloaden, ga ik gewoon een HTTP-client gebruiken en ik ga een webclient
‫bellen.
‫Nu is BTP-client een klasse waaraan we een systeem moeten toevoegen.
‫En ik dacht HTP, dat is wat we hier nodig hebben.
‫Dus deze webclient nu, het wordt een nieuwe pagina GTP-client.
‫En nu wil ik een string hebben, die de HTML zal zijn, die een webclient-punt zal
‫zijn, een string async krijgt en welke string goed zal worden, het zou de https-kolom moeten krijgen forward slash forward slash
‫Google dot com en ik wil heb daar het resultaat van.
‫Dus download de website en geef me het resultaat en opgeslagen in HTML.
‫Dus dat is wat dit ding zal doen.
‫Rechts.
‫En wat ik ga zien is de draad waar ik op zit.
‫Dus ik wil de draad zien waar ik aan werk.
‫De juiste lijn wordt het draadnummer en de draadstip en om draad te gebruiken, moeten we dit doen.
‫Gebruik systeemnagesynchroniseerde threading en om Deba te gebruiken, moeten we de standaarddiagnose van het systeem gebruiken.
‫Dus laten we die twee dingen doen en nu kunnen we doorgaan en de huidige thread en de MENAGED thread-ID ophalen.
‫Dus ik wil gewoon weten welke ik deed als een draad die ik momenteel heb.
‫Dus als ik op de knop klik, wordt deze debug afgedrukt en wordt er iets gedownload.
‫Laten we nu zeggen dat ik de inhoud van de knop wil veranderen, dus mijn knop die inhoud om zoiets te gebruiken, is
‫klaar.
‫Laten we dat dus eens testen.
‫Daar zijn we.
‫Zodra ik op de knop klik, kun je zien dat het klaar is.
‫Heb het gedownload en het is klaar.
‫En dat gebeurt omdat deze hier, dus het downloaden van een Google-account werkt eigenlijk best snel, en daarom is het
‫zelfs mogelijk om de inhoud van Ekwall te doen, maar meestal zou dat niet mogelijk moeten zijn, of in de meeste gevallen zal
‫het niet mogelijk zijn , omdat deze taak hier meestal vrij lang duurt.
‫En we hebben hier een draad die behoorlijk, ja, behoorlijk zwaar is, omdat het downloaden van dingen meestal een tijdje duurt.
‫En behalve dat het heel, heel weinig is dat we in dit geval daadwerkelijk downloaden,
‫downloaden we gewoon een Google dot com-website, wat heel erg kort is.
‫Het is maar een paar kilobyte.
‫Dus in plaats daarvan ga ik geen bestand van vijf megabyte downloaden.
‫Het duurt dus nog even voordat dat allemaal klaar is.
‫Dus laten we het nog eens bekijken.
‫Ik ga op de knop drukken en nu zie je dat het vastloopt.
‫En pas toen het klaar was, veranderde het in Dunn.
‫Dus misschien is het bestand van vijfentwintig megabyte te klein.
‫Laten we het bestand van 200 megabyte maken en daadwerkelijk controleren of er een op de website staat en die is er.
‫Oké, laten we het nog eens proberen.
‫Nu zal het bestand een stuk groter zijn en zal het behoorlijk wat tijd kosten om het voor elkaar te krijgen.
‫Dus ik druk op de knop.
‫En zoals je nu kunt zien, bevriest het, het is bevroren en het heeft niets totdat de downloads zijn voltooid.
‫En dat komt omdat we bij de derde zijn.
‫Dus het hele scherm is bevroren totdat die download is voltooid.
‫En dat is iets dat heel gevaarlijk is.
‫Dat moet je niet doen.
‫Je moet altijd voorzichtig zijn als je dingen doet die zwaar zijn voor de hoofdbedreiging of de UI-thread,
‫omdat de hoofdbedreiging of de UI-bedreiging er echt is.
‫Druk bezig met het updaten van de UI, net als alle UI-dingen en.
‫Nou, nu is mijn bestand in mijn programma zo goed als bevroren.
‫Dus ik ga gewoon het bestand van honderd megabyte gebruiken.
‫Misschien is dat een betere keuze en wat we hebben gedaan en we zullen nog steeds het verschil zien.
‫Rechts.
‫Dus ik heb hier zojuist een link gebruikt waar je eenvoudig willekeurige bestanden kunt downloaden.
‫Dus laten we er nog eens op drukken.
‫Zoals je nu kunt zien, is het bevroren en duurt het even voordat het klaar is.
‫En daar ben je.
‫Het is klaar.
‫Dus het heeft het bestand gedownload en het is goed gedaan.
‫En zou je ook zien dat we bezig zijn met dreiging nummer één, dus dat is de grootste dreiging, toch?
‫En we draaien op de belangrijkste bedreiging en we proberen iets te downloaden en we proberen de gebruikersinterface bij
‫te werken en.
‫Wel, daarom duurt het hier even.
‫Dus nu zou je kunnen zeggen, oké, laten we een taak maken om dat te doen.
‫Dus laten we een taak maken die wordt uitgevoerd en we gaan hier wat code uitvoeren.
‫Dus ik ga de code daar gewoon zo kopiëren.
‫En laten we dat nu debuggen.
‫Dus laten we hier een klein debug-punt toevoegen.
‫Dus laten we doorgaan en dat debuggen om te zien welke threads er daadwerkelijk bij betrokken zijn.
‫Dus ik ga op de knop drukken en dat we zijn in deze draad.
‫En dat we zo zijn, we hebben verschillende werkthreads waar de belangrijkste dreiging, de dreiging, is, en
‫we zagen dat eerder toen we iets uitvoerden.
‫Dus als de belangrijkste dreiging en dan hebben we onze taak uitgevoerd, die ook een dreiging heeft, en we zijn in dreiging
‫vijf.
‫Dus je kunt zien dat bedreiging vijf een arbeidersbedreiging is, en dat is degene die we hier hebben.
‫Dus laten we naar de volgende stap gaan.
‫We zijn nog steeds bij de executie of nog steeds een bedreiging, vijf, dan doen we het nog een keer, nog steeds een bedreiging vijf.
‫Nu proberen we iets te doen.
‫Dus we proberen mijn knop te updaten.
‫Gedaan.
‫En laten we weer naar de volgende stap gaan, zoals je kunt zien, bevriest mijn applicatie de evaluatie-uitdrukking, mijn
‫knop.
‫Dus we wachten weer af.
‫Dus behoorlijk zwaar voor en zoals je kunt zien dat we in die operatie zitten, kan een uitzondering op het aanroepen van
‫thread geen toegang krijgen tot het object omdat een andere thread het bezit.
‫Wat betekent dat?
‫Het betekent dat mijn knop eigendom is van een andere thread.
‫En door welke draad?
‫Welnu, het is eigendom van de UI-thread, onze hoofdthread.
‫Dus de hoofdthread is verantwoordelijk voor het verzorgen van alle UI-elementen, zodat ze niet vastlopen.
‫Het is belangrijk dat je altijd reageert en in dit geval reageert het niet meer omdat we proberen
‫toegang te krijgen tot deze regel code, ook al staat het niet in de juiste thread.
‫Dus we zijn in draad vijf en we proberen toegang te krijgen tot iets dat bij draad één hoort en dat is iets
‫dat ongeldig is.
‫Dus we krijgen hier deze uitzondering voor ongeldige bewerkingen en we moeten een andere oplossing vinden om dat te beheren.
‫En het is over het algemeen een concept van verschillende bedreigingen.
‫Dus over het algemeen moet je voorzichtig zijn als je met verschillende threads en met verschillende objecten werkt.
‫Als de objecten eigendom zijn van andere threads, kunt u ze niet wijzigen of wijzigen.
‫Dat is dus iets waar je rekening mee moet houden.
‫Dus hoe kunnen we dat doen?
‫Over het algemeen, laten we eerst de omhoog stoppen en laten we daarom naar de knop gaan en hier een knop
‫maken.
‫En ik wil een knop bekijken door op de knop te drukken of de knop ingedrukt te houden en op de knop te drukken.
‫Dus Button erft van de knopbasis, wat een constante controle is, die erft van
‫controle, van framework-element, van UI-element.
‫Dat is een visueel object, wat een afhankelijkheidsobject is, verzender-object dat we zijn, dus het is een
‫verzender-object en hier controleert het alleen de toegang en zeer pittige toegang.
‫Dit is dus een dispatcher-object en we gebruiken hier een dispatcher en de dispatcher heeft tal van variabelen,
‫gebeurtenissen, enzovoort.
‫Waarom laat ik je dat zien?
‫Nou, het is omdat we dispatcher zullen gebruiken om onze thread voor hen te beheren.
‫Mijn knop.
‫Dus wat moet ik hier doen?
‫Nou, ik heb mijn button dot dispatcher nodig zodat de ramen bedreigend worden.
‫Dispatcher De systeemvensters stoppen met het bedreigen van het object van de dispatcher.
‫Zo komen we er nu achter welk draadje bij onze button hoort of eigenlijk bij welke Fred.
‫Onze knop hoort erbij.
‫Dus laten we de coördinator controleren en hier die ik aanroep voert de gespecificeerde actie asynchroon uit
‫op de thread, de systeemvensters waarmee deze coördinator is geassocieerd.
‫Dus dat is precies waar ik het over had, wat we moeten doen.
‫Dus laten we doorgaan en dat doen en laten we de code hier nu uitvoeren.
‫Dus ik ga hem daar onderaan sluiten.
‫En nu kun je zien dat je nu kunt doorgaan en zeggen, OK, mijn knopinhoud zegt gewoon klaar en
‫ik ga de debug opnieuw gebruiken om te zien in welke dreiging ik op dit punt zit.
‫Dus laten we de code opnieuw uitvoeren.
‫Laten we nu op de knop drukken.
‫En zoals je kunt zien, zijn we hier nu.
‫En ik zou veel opnieuw moeten evalueren, zodat we nu in draad vijf zijn.
‫Dit is waar we het debuggen doen.
‫Dan gaan we naar de volgende draad of volgende regel.
‫Volgende regel.
‫En dan is de gebruikersinterface weer op het goede spoor.
‫Waar hier.
‫En nu kunnen we naar de volgende stap.
‫Dus we zijn in de coördinator en hij springt over wat ik je wilde laten zien.
‫Dus laten we het eens bekijken, naar Windows gaan en de debug-console bekijken, wat de output is, zodat we zijn,
‫het zegt dreiging nummer vijf.
‫En toen stond er dreiging nummer één.
‫Dus dit is dreiging nummer één en dat is dreiging nummer vijf.
‫Dus de eigenaar van de knop is, zoals je kunt zien, dreiging nummer één.
‫En om dat wat duidelijker te maken, zouden we dat hier aan onze regel kunnen toevoegen.
‫Bedreiging nummer één of bedreiging nummer zo-en-zo is eigenaar van mijn knop.
‫Dus nu zijn we wat duidelijker.
‫Laten we het opnieuw uitvoeren en dan zou het correct moeten worden weergegeven.
‫Dus hier is de output en er is nog niets interessants.
‫We drukken op de knop en je ziet dat dreiging nummer vijf werd uitgevoerd en dan begint het te downloaden.
‫En één, het is niet als het eenmaal klaar is, er staat hier dreiging.
‫Niemand bezit mijn knop.
‫Dus laten we nog een keer drukken.
‫En nu, zoals je kunt zien, werkt de knop nog steeds en wordt hij nog steeds bijgewerkt.
‫Dus dat is goed.
‫En dat is een manier om het te doen.
‫Er is echter een andere manier en ik ga je een andere laten zien, wat een voorkeursoplossing is.
‫Dus ik ga dit kopiëren.
‫Mijn knop klik.
‫Ik ga het mijn klik op de knop noemen, zodat het niet interfereert.
‫En nu ga ik zeggen bij welke dreiging ik buiten sta.
‫Dus hier, welke bedreiging ben ik als ik op de knop klik?
‫Nou, dan zou ik in het rood moeten staan.
‫Ik ga een gewichtstaak gebruiken.
‫Voer die taak uit als een asynchrone taak.
‫Dus we moeten hier een async-sleutelwoord toevoegen.
‫Een visuele studio is nog steeds niet erg gelukkig.
‫Dus ik moet deze methode asynchroon maken.
‫Dus mijn klik op de knop is nu een asynchrone knopmethode die wacht op een specifieke taak om asynchroon
‫te worden uitgevoerd.
‫En wat ik hier doe, is dat ik dit bestand gewoon opnieuw download.
‫En in plaats van een coördinator te gebruiken, kan ik nu mijn knop echt buiten deze taak
‫bijwerken.
‫Dus ik ga het hier buiten doen.
‫Ik ga de inhoud van mijn knop zeggen en het gaat iets zeggen dat ik heb gedownload.
‫Dat is het.
‫Dus nu, in plaats van het met een coördinator te doen, wat een beetje werk was, maak ik het asynchroon.
‫Dus nu zou het ook goed moeten werken.
‫Nu, om dat te testen, ga ik de methode hier veranderen om op de methode te klikken om de knop te klikken naar.
‫Anders zou deze methode nooit worden uitgevoerd.
‫Dus laten we dat doen.
‫En misschien is dat ook nog eens toevoegen in welk draadje we zitten.
‫Dus draad niet zo onopgelost voor een wachtende taak.
‫En dan is deze na een gewichtstaak en die zal tijdens een gewichtstaak zijn.
‫Dus laten we het nu opnieuw uitvoeren.
‫Laten we op onze knop drukken.
‫En hier zie je voor TASC.
‫Er was toen niemand tijdens een gewichtstaak die draad nummer twee was en na gewichtstaak staat het weer op nummer
‫één en zijn we klaar met downloaden.
‫Dat is dus een andere aanpak die ook perfect werkt.
‫En dat is nog een betere manier.
‫Dus je hoeft niet de weg te gaan om te controleren, wat de mijne bedreigde.
‫Maar je maakt een ander draadje waar je dingen doet.
‫Maar en je maakt er ook een gewicht van.
‫Dus je maakt het asynchroon.
‫Nu, iets dat ik je ook wil laten zien, is een webbrowser, dus wat ik hier ga doen, is dat ik
‫de grootte van de knop ga verkleinen.
‫Ik ga het hier in de linkerbovenhoek plaatsen en ik ga een webbrowser gebruiken.
‫Ik ga het gewoon naar binnen slepen en het een beetje groter maken.
‫Dus nu hebben we alleen deze webbrowser en die zou ons moeten laten zien aan welke kant we staan.
‫Dus wat er gebeurt, is dat wanneer ik op de knop druk, ik een specifieke website ga downloaden, die
‫ik handmatig zal definiëren.
‫Dit is dus slechts een klein voorbeeld om toe te voegen aan wat we tot nu toe hebben gezien.
‫Ik ga niet in op een volledige webbrowser.
‫Ik ga je niet laten zien hoe je dat moet doen.
‫Je kunt je gang gaan en het zelf proberen.
‫Ik ga je gewoon laten zien hoe je nu die HTML kunt gebruiken die
‫je hebt gedownload van deze specifieke link, die hard gecodeerd is en eenvoudig te gebruiken, of om die in een webbrowser weer te geven.
‫Dus https Google punt com.
‫Dus wat er gebeurt, is dat wanneer ik op de knop druk, Google dot com wordt gedownload.
‫Om dat te doen, heb ik een specifieke methode nodig en ik ga deze niet handmatig typen.
‫Ik ga het hier gewoon kopiëren en plakken.
‫Dus deze methode voor HTML-wijziging wordt aangeroepen wanneer een afhankelijkheidseigenschap wordt gewijzigd.
‫Dus wat ik hier ga zeggen, is dat HTML-verandering een afhankelijkheidsobject en een gebeurtenisargument voor het wijzigen van de
‫afhankelijkheidseigenschap nodig heeft, dat hier E wordt genoemd.
‫Ik ben gewoon een webbrowser aan het maken die dat afhankelijkheidsobject gaat gebruiken en als een webbrowser gaat gebruiken.
‫En als de webbrowser niet null is, navigeer dan naar een specifieke tekenreeks, die een nieuwe waarde zal zijn als
‫een tekenreeks.
‫Dus wat die afhankelijkheidsargumenten ook zijn, eigenschap veranderd, gebeurtenisargumenten zijn.
‫Daar haal ik de string vandaan.
‫Dus dat is zo'n beetje wat er in de webbrowser moet worden weergegeven.
‫Dus ik had het makkelijk op een makkelijkere manier gedaan.
‫Maar het probleem is dat het niet zo eenvoudig is om dat te doen.
‫Er zijn dus geen eenvoudigere of veel gemakkelijkere manieren om dat te doen.
‫Dus dat is over het algemeen de benadering die u hier zou moeten doen.
‫Dus in plaats van alleen de knop bij te werken terwijl Dan downloadt, wil ik de webbrowser bijwerken en daarom heeft de
‫webbrowser een naam nodig.
‫Dus ik ga de webbrowser een naam geven en ik noem het mijn webbrowser.
‫Nu, de webbrowser, ik ga het hier noemen of hier eigenlijk gewijzigd.
‫Wat ik wil doen, is dat ik de waarde van die browser wil instellen en ik wil deze met iets instellen.
‫En je kunt zien dat we de afhankelijkheidseigenschap nodig hebben en een object dat van waarde is.
‫Dus hoe krijg ik dat?
‫Waar haal ik dat vandaan?
‫Welnu, er zijn hier meerdere, meerdere dingen.
‫Dus een daarvan is dat we een afhankelijkheidseigenschap nodig hebben, dus laten we er een maken.
‫Laten we het hier bovenaan zetten.
‫En nogmaals, ik ga het gewoon kopiëren en plakken.
‫Ik ga je laten zien hoe het eruit ziet en wat het doet.
‫Het is dus een alleen-lezen afhankelijkheidseigenschap genaamd HTML-eigenschap.
‫En wij registreren.
‫Het wordt geregistreerd met HTML.
‫Zoals u kunt zien, heeft het een naam, string, naam, HTML nodig, vervolgens een eigenschapstype, een eigenaarstype en
‫eigenschapmetadata.
‫Dus dat is iets dat we hebben aangeroerd bij het werken met afhankelijkheidseigenschappen in het UPF-hoofdstuk.
‫Dus hier heb ik zojuist gemaakt met HTML.
‫Het type is dat het een string is.
‫Wat is de eigenaar.
‫Het is het hoofdvenster.
‫Dus onze klas hier.
‫En wat voor data is dit of welke metadata wil ik eraan geven en geef ik de op
‫html gewijzigde metadata.
‫Dus wat betekent dat.
‫Welnu, wanneer we de eigenschap op HTML instellen, wordt wijziging aangeroepen en dat is deze methode die hier wordt
‫aangeroepen.
‫Dus wat we nu kunnen doen, is dat we de waarde van mijn browser kunnen instellen met het volgende.
‫We kunnen doorgaan en HTML-eigenschap zeggen en deze instellen met HTML om HTML te gebruiken.
‫We moeten hier een kleine oplossing maken of een kleine oplossing hebben.
‫Eigenlijk ga ik het zo mijn HTML noemen en ik moet hier een variabele maken,
‫wat een string zal zijn mijn T en L die gewoon blah gaat zeggen, gewoon een string met stomme tekst erin hier.
‫Niets speciaals.
‫Maar als het eenmaal klaar is met downloaden, krijgen we het resultaat in onze HTML-string.
‫Ik zou hier niet alleen HTML kunnen zeggen omdat deze string lokaal is gemaakt en ik kan het niet
‫maken of het valt binnen de reikwijdte van onze taak hier en ik kan het niet buiten maken.
‫Dus daarom heb ik deze kleine oplossing nodig, zodat ik kan doorgaan en zeggen dat mijn HTML HTML is.
‫Dus dit.
‫Variabele hier, die valt binnen het bereik van onze mijn webbrowser, zeiden we hier, daarom kan ik nu doorgaan
‫en het hier instellen.
‫Dus in het kader van onze wachttaak.
‫Nu moeten we deze regel natuurlijk afmaken.
‫Dus dat is de manier waarop u de waarde van een webbrowser kunt instellen.
‫Oké, het is even zoeken, maar het werkt, dus laten we het testen, laten we onze code uitvoeren.
‫Laten we op de knop drukken.
‫En we zijn dus we hebben veel scriptfouten, maar dat is omdat we niets anders hebben gezegd.
‫Maar zoals je hier kunt zien, zijn we nu bij Google, dus we kunnen naar afbeeldingen gaan, naar Google Maps enzovoort.
‫Dus nu hebben we onze kleine browser gemaakt, die ons eenvoudig naar Google brengt.
‫Oké, gaaf.
‫Dus, zoals ik al zei, ik ga niet te diep in op browsers en zo, en ik wilde niet eens te
‫diep op die onderwerpen ingaan.
‫Maar dat is gewoon de manier waarop je het moet instellen.
‫Dat is een beetje, uh, ja.
‫Een kleine instelling die je moet doen.
‫Dus je moet deze methode hebben.
‫U moet deze afhankelijkheidseigenschap hebben, en dan kunt u doorgaan en de
‫waarde van uw browser instellen met de HTML-eigenschap, die onze afhankelijkheidseigenschap is, en wat HTML-code, de originele code die
‫we downloaden van Google dot com.
‫Of ik wil het even snel samenvatten, wat is het idee om verschillende threads te gebruiken?
‫Welnu, je hebt de belangrijkste bedreiging die de gebruikersinterface afhandelt en als je iets wilt doen dat
‫zwaar is, dus wat even duurt, bijvoorbeeld downloaden van internet, bijvoorbeeld iets kopiëren van het ene bestand naar het andere of
‫werken met harde schijven of wat dan ook, dat is wat echt logisch is om dat op de
‫achtergrond te doen.
‫Je maakt dus een andere taak of een andere thread aan die daarvoor zorgt.
‫Dus hier hebben we een asynchrone taak gemaakt die dat op de achtergrond doet.
‫En als dat eenmaal gedaan is, kunnen we doorgaan met de rest.
‫Dus het zal onze hoofdlijn niet bevriezen.
‫Onze UI gaat nog steeds naar behoren werken, en daar gaat het allemaal om.
‫Oke.
‫Dus tot ziens in de.