‫Bentornato e questo video, esamineremo le attività e in particolare quando si lavora con l'UPF,
‫quindi creiamo un nuovo progetto e usiamo WP F qui e chiamerò un doppio.
‫Hai dei compiti.
‫E nel mio caso, quindi premiamo, OK, per creare quel progetto e nella mia conoscenza dell'interfaccia utente in un pulsante.
‫E lo farò attraverso la cassetta degli attrezzi.
‫Quindi selezionerò un pulsante e lo trascinerò nella mia interfaccia utente in modo da renderlo un po' più
‫grande.
‫E cambiamo la dimensione del carattere in 32, forse qualcosa del genere.
‫Ora è un po' più facile da leggere e gli darò un nome.
‫Il nome è uguale al mio pulsante perché voglio usarlo in seguito nel mio codice dietro.
‫Va bene, quindi questa è l'interfaccia utente per ora.
‫In seguito aggiungeremo un piccolo browser Web, ma per ora il pulsante andrà bene.
‫E nella mia finestra principale, voglio usare quel pulsante, ma ho bisogno di fare clic su evento quindi.
‫Quindi, ogni volta che qualcuno fa clic su quel pulsante, voglio scaricare qualcosa dal Web e
‫una volta terminato il download, voglio assegnare il TEMEL al testo del pulsante al contenuto del pulsante e quindi ho bisogno di un
‫evento clic.
‫Quindi farò doppio clic sul pulsante e creerà un nuovo evento my button click qui.
‫Quindi questo metodo verrà attivato ogni volta che faremo clic sul pulsante.
‫E il modo più semplice per vedere se è vero è usare semplicemente una finestra di messaggio e dire qualcosa come ciao o ha
‫funzionato o qualcosa del genere.
‫Ora eseguiamolo solo per vedere che il nostro codice funziona davvero, perché prima di fare qualsiasi altra cosa, salviamo il pulsante
‫che funziona e dice ciao.
‫Va bene, va bene.
‫Ora, come puoi vedere, il testo stesso non è grande quanto il testo del pulsante.
‫Non è carino, ma non è di questo che tratta questo video, giusto?
‫Si tratta di test e di scaricare qualcosa in background mentre l'interfaccia utente non è bloccata.
‫Tutto bene.
‫Quindi troviamo un modo per bloccarlo.
‫Quindi andiamo avanti e proviamo qualcosa come il download.
‫E per scaricare qualcosa, userò solo un client HTTP e chiamerò un client Web.
‫Ora, il client BTP è una classe che dobbiamo aggiungere al sistema.
‫E ho pensato che HTP è quello di cui abbiamo bisogno qui.
‫Quindi questo client Web ora sarà un nuovo client GTP di pagina.
‫E ora voglio avere una stringa, che sarà l'HTML, che sarà client Web dot
‫ottieni una stringa asincrona e quale stringa andrà bene dovrebbe ottenere la colonna https barra in avanti barra in avanti
‫Google punto com e voglio avere il risultato di ciò.
‫Quindi scarica il sito Web e dammi il risultato e memorizzato all'interno di HTML.
‫Quindi questo è ciò che farà questa cosa.
‫Destra.
‫E quello che vedrò è il thread su cui sono.
‫Quindi voglio vedere il thread su cui sto lavorando.
‫La linea giusta sarà il numero del filo e il punto del filo e per usare il filo dobbiamo farlo.
‫Utilizzare il threading doppiato di sistema e, per utilizzare Deba, è necessario utilizzare la diagnostica standard del sistema.
‫Quindi facciamo queste due cose e ora possiamo andare avanti e ottenere il thread corrente e l'ID del thread GESTITO.
‫Quindi voglio solo sapere quale ho fatto come thread su cui sto attualmente correndo.
‫Quindi, quando clicco sul pulsante, questo debug verrà stampato e scaricherà qualcosa.
‫Ora, diciamo che voglio cambiare il contenuto del pulsante, quindi il mio pulsante quel contenuto per usare qualcosa di simile fatto.
‫Quindi proviamolo.
‫Ci siamo.
‫Una volta che clicco sul pulsante, puoi vedere che ora è fatto.
‫Scaricato e il gioco è fatto.
‫E questo accade perché questo qui, quindi il download dell'account Google funziona in realtà piuttosto velocemente, ed è per questo
‫che è anche possibile eseguire il contenuto di Ekwall, ma di solito ciò non dovrebbe essere possibile o, nella maggior parte dei casi,
‫non sarà possibile , perché questo compito di solito richiede un po' di tempo.
‫E abbiamo un thread qui che è abbastanza, sì, piuttosto pesante perché il download di materiale di solito richiede un po' di
‫tempo.
‫E tranne che in questo caso stiamo scaricando molto, molto poco, stiamo solo scaricando
‫un sito web di Google dot com, che è molto, molto breve.
‫Sono solo un paio di kilobyte.
‫Quindi, invece, non ho intenzione di scaricare un file di cinque megabyte.
‫Quindi ci vuole un po' di più prima che tutto ciò sia fatto.
‫Quindi controlliamo di nuovo.
‫Vado a premere il pulsante e ora lo vedi si blocca.
‫E solo una volta fatto, è cambiato in Dunn.
‫Quindi forse il file da venticinque megabyte è troppo piccolo.
‫Creiamo il file da 200 megabyte e controlliamo effettivamente se ce n'è uno sul sito Web e ce n'è uno.
‫Va bene, proviamo di nuovo.
‫Ora, il file sarà molto più grande e ci vorrà un po' di tempo per completarlo.
‫Quindi premo il pulsante.
‫E come puoi vedere ora, si sta congelando, è congelato e non ha nulla fino al termine dei download.
‫E questo perché siamo al terzo.
‫Quindi l'intero schermo è bloccato fino al completamento del download.
‫Ed è qualcosa di molto pericoloso.
‫Non dovresti farlo.
‫Dovresti sempre fare attenzione quando fai cose pesanti sulla minaccia principale o sul thread dell'interfaccia utente, perché la minaccia
‫principale o la minaccia dell'interfaccia utente è davvero qui.
‫Impegnato con l'aggiornamento dell'interfaccia utente, così come tutte le cose dell'interfaccia utente e.
‫Bene, ora il mio file sul mio programma è praticamente bloccato.
‫Quindi userò solo il file da cento megabyte.
‫Forse è una scelta migliore e quello che abbiamo fatto e vedremo ancora la differenza.
‫Destra.
‫Quindi ho appena usato qui un link dove puoi semplicemente scaricare file casuali.
‫Quindi premiamolo di nuovo.
‫Come puoi vedere ora, è congelato e ci vorrà un po' di tempo prima che sia pronto.
‫Ed eccoti.
‫E 'fatto.
‫Quindi ha scaricato il file ed è andato tutto bene.
‫E vedresti anche che stiamo correndo sulla minaccia numero uno, quindi questa è la minaccia principale, giusto?
‫E stiamo eseguendo la minaccia principale e stiamo cercando di scaricare qualcosa e stiamo cercando di aggiornare
‫l'interfaccia utente e.
‫Bene, ecco perché ci vuole un po' di tempo qui.
‫Quindi ora potresti dire, va bene, creiamo un'attività per farlo.
‫Quindi creiamo un'attività da eseguire ed eseguiremo del codice qui.
‫Quindi copierò il codice lì dentro in questo modo.
‫E ora eseguiamo il debug.
‫Quindi aggiungiamo un piccolo punto di debug qui.
‫Quindi andiamo avanti ed eseguiamo il debug solo per vedere quali thread sono effettivamente coinvolti.
‫Quindi premo il pulsante e siamo all'interno di questo thread.
‫E questo è così abbiamo diversi thread di lavoro in cui la minaccia principale, che è quella della
‫minaccia, e l'abbiamo visto in precedenza mentre eseguivamo qualcosa.
‫Quindi, se la minaccia principale e poi abbiamo la nostra attività eseguita, che ha anche una minaccia, e siamo nella minaccia
‫cinque.
‫Quindi puoi vedere che la minaccia cinque è una minaccia per i lavoratori, ed è quella che abbiamo qui.
‫Quindi andiamo al passaggio successivo.
‫Siamo ancora all'esecuzione o ancora una minaccia, cinque, quindi facciamolo di nuovo, ancora una minaccia cinque.
‫Ora stiamo cercando di fare qualcosa.
‫Quindi stiamo cercando di aggiornare il mio pulsante.
‫Fatto.
‫E andiamo di nuovo al passaggio successivo, come puoi vedere, la mia applicazione blocca la sua espressione di valutazione, il mio
‫pulsante.
‫Quindi stiamo aspettando di nuovo.
‫Quindi abbastanza pesante per questo e come puoi vedere che siamo in quell'operazione, l'eccezione alla chiamata del thread
‫non può accedere all'oggetto perché un thread diverso lo possiede.
‫Che cosa significa?
‫Bene, significa che il mio pulsante è di proprietà di un thread diverso.
‫E con quale filo?
‫Bene, è di proprietà del thread dell'interfaccia utente, che è il nostro thread principale.
‫Quindi il thread principale è responsabile di prendersi cura di tutti gli elementi dell'interfaccia utente in modo che non si blocchino.
‫È importante che tu risponda sempre e in questo caso non risponde più perché stiamo cercando
‫di accedere a questa riga di codice anche se non è nel thread giusto.
‫Quindi siamo nel thread cinque e stiamo cercando di accedere a qualcosa che appartiene al thread uno ed è qualcosa che
‫non è valido.
‫Quindi otteniamo questa eccezione di operazione non valida qui e dobbiamo trovare una soluzione diversa per gestirla.
‫Ed è generalmente un concetto di minacce diverse.
‫Quindi, in generale, devi stare attento quando lavori con thread diversi e con oggetti diversi.
‫Se gli oggetti sono di proprietà di altri thread, non è possibile modificarli o modificarli.
‫Quindi è qualcosa di cui devi essere consapevole.
‫Quindi come possiamo farlo?
‫Bene, in generale, fermiamo prima l'up e andiamo in button, quindi, e creiamo un pulsante qui.
‫E voglio controllare il pulsante premendo il controllo o tenendo premuto il controllo e premendo il pulsante.
‫Quindi Button eredita dalla base del pulsante, che è un controllo costante, che eredita dal controllo,
‫dall'elemento del framework, dall'elemento dell'interfaccia utente.
‫Che è un oggetto visivo, che è un oggetto dipendenza, un oggetto spedizioniere che siamo, quindi è
‫un oggetto dispatcher e qui controlla solo l'accesso e l'accesso molto esuberante.
‫Quindi questo è un oggetto dispatcher e stiamo usando un dispatcher qui e il dispatcher ha molte variabili, eventi e
‫così via.
‫Perché te lo mostro?
‫Bene, è perché useremo il dispatcher per gestire il nostro thread per loro.
‫Il mio bottone.
‫Allora come dovrei fare qui?
‫Bene, ho bisogno del mio distributore di punti pulsante, così le finestre sono minacciose.
‫Dispatcher Le finestre di sistema smettono di minacciare l'oggetto dispatcher a cui è associato.
‫Quindi ora scopriamo quale thread appartiene al nostro pulsante o effettivamente a quale Fred.
‫Il nostro pulsante appartiene.
‫Quindi controlliamo il dispatcher e qui invoco esegue l'azione specificata in modo asincrono sul thread, le
‫finestre di sistema a cui è associato questo dispatcher.
‫Quindi è esattamente quello di cui stavo parlando, quello che dobbiamo fare.
‫Quindi andiamo avanti e facciamolo ed eseguiamo il codice qui ora.
‫Quindi lo chiuderò in fondo lì.
‫E ora puoi vedere che ora puoi andare avanti e dire, OK, il contenuto del mio pulsante dice semplicemente
‫fatto e userò di nuovo il debug per vedere in quale minaccia mi trovo a questo punto.
‫Quindi eseguiamo di nuovo il codice.
‫Ora premiamo il pulsante.
‫E come puoi vedere, ora siamo qui.
‫E dovevo valutare molto di nuovo in modo che siamo così siamo nel thread cinque ora.
‫Qui è dove facciamo la cosa del debug.
‫Quindi andiamo al thread successivo o alla riga successiva.
‫Riga successiva.
‫E poi l'interfaccia utente è di nuovo in pista.
‫Dove qui dentro.
‫E ora possiamo andare al passaggio successivo.
‫Quindi siamo nel centralino e lui salta davvero su quello che volevo mostrarti.
‫Quindi diamo un'occhiata, andiamo su Windows e vediamo la console di debug, che è l'output in modo che ci dica
‫la minaccia numero cinque.
‫E poi c'era scritto la minaccia numero uno.
‫Quindi questa è la minaccia numero uno e questa è la minaccia numero cinque.
‫Quindi il proprietario del pulsante, come puoi vedere, è la minaccia numero uno.
‫E per renderlo un po' più chiaro, potremmo aggiungerlo alla nostra linea qui.
‫La minaccia numero uno o la minaccia numero tale possiede il mio pulsante.
‫Quindi ora saremo un po' più chiari.
‫Eseguiamolo di nuovo e poi dovrebbe essere visualizzato correttamente.
‫Quindi ecco l'output e non c'è ancora niente di interessante.
‫Premiamo il pulsante e vedi che la minaccia numero cinque è stata eseguita e quindi inizia il download.
‫E uno, non è una volta fatto, qui dice minaccia.
‫Nessuno possiede il mio bottone.
‫Quindi premiamo di nuovo.
‫E ora, come puoi vedere, il pulsante funziona ancora e si sta ancora aggiornando.
‫Quindi va bene.
‫E questo è un modo per farlo.
‫C'è un altro modo, però, e te ne mostrerò un altro, che è una soluzione preferita.
‫Quindi ho intenzione di copiare questo.
‫Il mio clic del pulsante.
‫Lo chiamerò il mio clic del pulsante solo così non interferisce.
‫E ora dirò a quale minaccia mi trovo fuori.
‫Quindi qui, quale minaccia sono quando clicco sul pulsante?
‫Beh, allora dovrei essere in rosso.
‫Userò un compito con i pesi.
‫Eseguire quell'attività dovrebbe essere un'attività asincrona.
‫Quindi dobbiamo aggiungere la parola chiave asincrona qui.
‫Uno studio visivo non è ancora molto felice.
‫Quindi ho bisogno di rendere questo metodo asincrono.
‫Quindi c'è il mio clic sul pulsante ora sarà un metodo di pulsante asincrono che attenderà che un'attività specifica venga eseguita
‫in modo asincrono.
‫E quello che faccio qui è semplicemente scaricare di nuovo questo file.
‫E invece di utilizzare un dispatcher, quello che posso fare ora è aggiornare il mio pulsante al di fuori di questa
‫attività.
‫Quindi lo farò qui fuori.
‫Dirò il contenuto del mio punto pulsante e dirà qualcosa che ho scaricato.
‫Questo è tutto.
‫Quindi ora, invece di farlo con un dispatcher, che era un po' di aggirare il problema, lo rendo asincrono.
‫Quindi ora dovrebbe funzionare anche bene.
‫Ora, per testarlo, cambierò il metodo qui per fare clic sul metodo per fare clic sul pulsante per.
‫In caso contrario, questo metodo non verrebbe mai eseguito.
‫Quindi facciamolo.
‫E forse questo è anche aggiungere su quale filo siamo.
‫Quindi thread non così irrisolto prima di un compito in attesa.
‫E poi questo è dopo un'attività con i pesi e quella sarà durante un'attività con i pesi.
‫Quindi ora eseguiamolo di nuovo.
‫Premiamo il nostro pulsante.
‫E qui vedete prima di TASC.
‫Non c'era nessuno allora durante un'attività di peso che era il thread numero due e dopo l'attività di peso, è di nuovo al
‫numero uno e abbiamo finito di scaricare.
‫Quindi anche questo è un approccio diverso che funziona perfettamente.
‫E questo è anche un modo migliore.
‫Quindi non devi fare il controllo, che ha minacciato il mio.
‫Ma crei un thread diverso in cui fai cose.
‫Ma ne fai anche un peso.
‫Quindi lo rendi asincrono.
‫Ora, una piccola cosa che voglio mostrarvi è anche un browser Web, quindi quello che farò qui
‫è ridurre la dimensione del pulsante.
‫Lo metterò qui nell'angolo in alto a sinistra e userò un browser web.
‫Lo trascinerò lì dentro e lo ingrandirò un po'.
‫Quindi ora avremo solo questo browser Web e dovrebbe mostrarci da che parte stiamo.
‫Quindi quello che accadrà è che ogni volta che premo il pulsante, sto per scaricare un sito Web
‫specifico, che definirò manualmente.
‫Quindi questo è solo un piccolo esempio per aggiungere ciò che abbiamo visto finora.
‫Non ho intenzione di entrare in un browser Web completo.
‫Non ti mostrerò come farlo.
‫Puoi andare avanti e provare tu stesso.
‫Ti mostrerò solo come ora puoi usare quell'HTML che hai
‫scaricato da questo link specifico, che è codificato e semplice da usare così o visualizzalo in un browser web.
‫Quindi https Google punto com.
‫Quindi quello che succederà è che ogni volta che premo il pulsante, verrà scaricato Google dot com.
‫Ora, per farlo, ho bisogno di un metodo specifico e non lo digiterò manualmente.
‫Lo copio e incollo qui.
‫Quindi questo metodo sulla modifica HTML verrà chiamato ogni volta che verrà modificata una proprietà di dipendenza.
‫Quindi quello che sto per dire qui è che il cambiamento HTML richiede un oggetto di dipendenza e un argomento dell'evento di
‫modifica della proprietà di dipendenza, che si chiama E qui.
‫Sto solo creando un browser Web che prenderà quell'oggetto dipendenza e lo utilizzerà come browser Web.
‫E quindi, se il browser Web non è null, passa a una stringa specifica, che sarà un nuovo valore
‫come stringa.
‫Quindi, qualunque siano questi argomenti di dipendenza, la proprietà è cambiata, gli argomenti dell'evento sono.
‫È da lì che prendo la stringa.
‫Quindi è praticamente proprio ciò che deve essere visualizzato sul browser Web.
‫Quindi l'avrei fatto facilmente in un modo più semplice.
‫Ma il problema è che non è così facile farlo.
‫Quindi non ci sono modi più semplici o molti modi più semplici per farlo.
‫Quindi questo è generalmente l'approccio che dovresti fare qui.
‫Quindi, invece di aggiornare semplicemente il pulsante con il download di Dan, voglio aggiornare il browser Web e quindi il browser Web ha
‫bisogno di un nome.
‫Quindi darò un nome al browser Web e lo chiamerò il mio browser Web.
‫Ora, il browser Web, lo chiamerò qui o effettivamente modificato qui.
‫Quello che voglio fare è impostare il valore di quel browser e voglio impostarlo con qualcosa.
‫E puoi vedere che abbiamo bisogno della proprietà di dipendenza e di un oggetto di valore.
‫Quindi come lo ottengo?
‫Da dove lo prendo?
‫Bene, ci sono molte, molte cose qui.
‫Quindi uno di questi è che abbiamo bisogno di una proprietà di dipendenza, quindi creiamone uno.
‫Mettiamolo qui in alto.
‫E ancora, lo copio e incollo.
‫Ti mostrerò come appare e cosa fa.
‫Quindi è una proprietà di dipendenza di sola lettura chiamata proprietà HTML.
‫E noi registriamo.
‫Verrà registrato con HTML.
‫Come puoi vedere, ha bisogno di un nome, una stringa, un nome, HTML, quindi un tipo di proprietà, un tipo di proprietario e metadati
‫di proprietà.
‫Quindi questo è qualcosa che abbiamo toccato quando si lavora con le proprietà di dipendenza nel capitolo UPF.
‫Quindi qui ho appena creato con HTML.
‫Il tipo è che è una stringa.
‫Qual è il proprietario.
‫È la finestra principale.
‫Quindi la nostra classe qui.
‫E che tipo di dati sono questi o quali metadati voglio dargli e gli do i metadati
‫modificati su html.
‫Che cosa vuol dire.
‫Bene, ogni volta che impostiamo la proprietà su HTML, verrà chiamato change ed è questo metodo qui che verrà
‫chiamato.
‫Quindi ora quello che possiamo fare è impostare il valore del mio browser con quanto segue.
‫Possiamo andare avanti e dire proprietà HTML e impostarla con HTML per usare HTML.
‫Dobbiamo fare una piccola soluzione qui o avere una piccola soluzione alternativa.
‫In realtà, lo chiamerò il mio HTML in questo modo e ho bisogno di creare una
‫variabile qui, che sarà una stringa la mia T e L che dirà solo bla, solo una stringa con testo stupido in qui.
‫Niente di speciale.
‫Ma poi, una volta terminato il download, otteniamo il risultato nella nostra stringa HTML.
‫Non potrei semplicemente dire HTML qui perché questa stringa è creata localmente e non posso
‫crearla o è nell'ambito del nostro compito qui e non posso crearla all'esterno.
‫Ecco perché ho bisogno di questa piccola soluzione alternativa in modo da poter andare avanti e dire che il mio HTML è HTML.
‫Così questo.
‫Variabile qui, che è nell'ambito del nostro browser Web, abbiamo detto qui, ecco perché posso andare avanti ora
‫e impostarlo qui.
‫Quindi nell'ambito del nostro compito di attesa.
‫Ora, ovviamente, dobbiamo finire questa linea.
‫Quindi è così che puoi impostare il valore di un browser Web.
‫Va bene, è un po' di lavoro, ma funziona, quindi proviamolo, eseguiamo il nostro codice.
‫Premiamo il pulsante.
‫E siamo così abbiamo un sacco di errori di script, ma è perché non abbiamo detto nient'altro.
‫Ma come puoi vedere qui siamo in Google ora, quindi possiamo andare alle immagini, a Google Maps e così via.
‫Quindi ora abbiamo creato il nostro piccolo browser, che ci porta semplicemente a Google.
‫Va bene, bello.
‫Quindi, come ho detto, non ho intenzione di approfondire i browser e cose del genere, e non volevo
‫nemmeno approfondire questi argomenti.
‫Ma questo è solo il modo in cui devi impostarlo.
‫È un po', uh, sì.
‫Un piccolo set che devi fare.
‫Quindi devi avere questo metodo.
‫Devi avere questa proprietà di dipendenza, quindi puoi andare avanti e impostare il valore
‫del tuo browser con la proprietà HTML, che è la nostra proprietà di dipendenza e del codice HTML, che è il codice
‫originale che scarichiamo da Google dot com.
‫Oppure, per riassumere velocemente ancora una volta, qual è l'idea di utilizzare thread diversi?
‫Bene, hai la minaccia principale che gestisce l'interfaccia utente e se vuoi fare qualcosa di pesante, che
‫richiede un po' di tempo per fare, ad esempio, scaricare dal Web, ad esempio, copiare qualcosa da un file a
‫un altro o lavorare con dischi rigidi o altro, questo è ciò che ha davvero senso farlo
‫in background.
‫Quindi crei un'attività diversa o un thread diverso che se ne occupi.
‫Quindi qui abbiamo creato un'attività asincrona che lo fa in background.
‫E una volta fatto, possiamo andare avanti con il resto.
‫Quindi non bloccherà il nostro thread principale.
‫La nostra interfaccia utente continuerà a funzionare correttamente, ed è proprio di questo che si tratta.
‫Tutto bene.
‫Allora ci vediamo in.