‫Bienvenidos de nuevo y este video, vamos a ver las tareas y específicamente cuando trabajemos con la UPF, por lo
‫tanto, creemos un nuevo proyecto y usemos WP F aquí y voy a llamar a un doble.
‫Tienes tareas.
‫Y en mi caso, presionemos, OK, para crear ese proyecto y, en mi conocimiento de la interfaz de usuario, en un botón.
‫Y voy a hacer eso a través de la caja de herramientas.
‫Así que solo seleccionaré un botón y lo arrastraré a mi interfaz de usuario para que lo hagamos un poco más
‫grande.
‫Y cambiemos el tamaño de fuente a 32, tal vez algo así.
‫Ahora es un poco más fácil de leer y le voy a poner un nombre.
‫El nombre es igual a mi botón porque quiero usarlo más adelante en mi código subyacente.
‫De acuerdo, esa es la interfaz de usuario por ahora.
‫Más adelante agregaremos un pequeño navegador web, pero por ahora, el botón estará bien.
‫Y en mi ventana principal, quiero usar ese botón, pero necesito hacer clic en el evento por lo tanto.
‫Entonces, cada vez que alguien hace clic en ese botón, quiero descargar algo de la web y, una
‫vez que se termina de descargar, quiero asignar el TEMEL al texto del botón al contenido del botón y, por lo tanto, necesito un evento
‫de clic.
‫Así que voy a hacer doble clic en el botón y se creará un nuevo evento de clic de mi botón aquí.
‫Entonces, este método se activará cada vez que hagamos clic en el botón.
‫Y la forma más fácil de ver si eso es cierto es simplemente usar un cuadro de mensaje y simplemente decir algo como hola
‫o funcionó o algo así.
‫Ahora ejecutémoslo solo para ver que nuestro código realmente funciona, porque antes de hacer cualquier otra cosa, simplemente el botón de
‫guardar funciona y dice hola.
‫Está bien, está bien.
‫Ahora, como puede ver, el texto en sí no es tan grande como el texto del botón.
‫Eso no es bonito, pero de eso no se trata este video, ¿verdad?
‫Se trata de pruebas y se trata de descargar algo en segundo plano mientras la interfaz de usuario no se atasca.
‫Está bien.
‫Así que encontremos una manera de hacerlo atascado.
‫Así que sigamos adelante e intentemos algo como descargar.
‫Y para descargar algo, solo voy a usar un cliente HTTP y voy a llamar a un cliente
‫web.
‫Ahora, el cliente BTP es una clase que tenemos que agregar system.
‫Y pensé HTP, eso es lo que necesitamos aquí.
‫Así que este cliente web ahora, será un cliente GTP de nueva página.
‫Y ahora quiero tener una cadena, que será el HTML, que será el punto del cliente
‫web, obtenga una cadena asíncrona y qué cadena se pondrá bien, debería obtener la columna https barra inclinada hacia adelante barra inclinada
‫hacia adelante Google dot com y quiero tener el resultado de eso.
‫Así que descargue el sitio web y déme el resultado y lo guarde en HTML.
‫Entonces eso es lo que hará esta cosa.
‫Derecha.
‫Y lo que voy a ver es el hilo en el que estoy.
‫Entonces quiero ver el hilo en el que estoy trabajando.
‫La línea derecha va a ser el número de hilo y el punto de hilo y para poder usar hilo necesitamos hacerlo.
‫Utilice el sistema de subprocesamiento denominado, y para utilizar Deba, necesitamos utilizar los diagnósticos estándar del sistema.
‫Así que hagamos esas dos cosas y ahora podemos seguir adelante y obtener el hilo actual y el ID del hilo MENAGED.
‫Así que solo quiero saber qué hice como un hilo que estoy ejecutando actualmente.
‫Entonces, cuando hago clic en el botón, esta depuración se imprimirá y descargará algo.
‫Ahora, digamos que quiero cambiar el contenido del botón, entonces mi botón ese contenido para usar algo como hecho.
‫Así que probemos eso.
‫Alli estamos nosotros.
‫Una vez que hago clic en el botón, puedes ver que está hecho.
‫Lo descargó y listo.
‫Y eso sucede porque este de aquí, por lo que la descarga de la cuenta de Google en realidad funciona bastante rápido,
‫y es por eso que incluso es posible hacer el contenido que Ekwall hizo, pero generalmente eso no debería ser posible, o en la mayoría
‫de los casos, no será posible. , porque esta tarea aquí suele llevar bastante tiempo.
‫Y tenemos un hilo aquí que es bastante, sí, bastante pesado porque descargar cosas por lo general lleva un tiempo.
‫Y excepto que es muy, muy poco lo que realmente estamos descargando en este caso, solo
‫estamos descargando un sitio web de Google punto com, que es muy, muy corto.
‫Son solo un par de kilobytes.
‫Entonces, en cambio, no voy a descargar un archivo de cinco megabytes.
‫Así que es un poco más hasta que todo esté listo.
‫Así que echémosle un vistazo de nuevo.
‫Voy a presionar el botón y ahora ves que se congela.
‫Y solo una vez que estuvo hecho, cambió a Dunn.
‫Entonces, tal vez el archivo de veinticinco megabytes sea demasiado pequeño.
‫Hagamos el archivo de 200 megabytes y verifiquemos si hay uno en el sitio web y si hay uno.
‫Está bien, intentémoslo de nuevo.
‫Ahora, el archivo será mucho más grande y llevará bastante tiempo terminarlo.
‫Entonces estoy presionando el botón.
‫Y como puede ver ahora, está congelado, está congelado y no tiene nada hasta que se realizan las descargas.
‫Y eso es porque estamos en el tercero.
‫Entonces, toda la pantalla se congela hasta que se realiza la descarga.
‫Y eso es algo muy peligroso.
‫No deberías hacer eso.
‫Siempre debe tener cuidado al hacer cosas que son pesadas en la amenaza principal o en el hilo de la interfaz de usuario, porque la
‫amenaza principal o la amenaza de la interfaz de usuario realmente está aquí.
‫Ocupado con la actualización de la interfaz de usuario, también lo hace todo lo relacionado con la interfaz de usuario y.
‫Bueno, ahora mi archivo en mi programa está prácticamente congelado.
‫Así que solo voy a usar el archivo de cien megabytes.
‫Tal vez sea una mejor opción y lo que hemos hecho y aún veremos la diferencia.
‫Derecha.
‫Así que acabo de usar aquí un enlace donde simplemente puede descargar archivos aleatorios.
‫Así que presionémoslo de nuevo.
‫Como puede ver ahora, está congelado y tomará un poco de tiempo hasta que esté listo.
‫Y ahí estás.
‫Se hace.
‫Entonces descargó el archivo y está bien.
‫Y también vería que nos estamos ejecutando en la amenaza número uno, así que esa es la principal amenaza, ¿verdad?
‫Y estamos ejecutando la amenaza principal y estamos tratando de descargar algo y estamos tratando de actualizar la interfaz
‫de usuario y.
‫Bueno, por eso lleva un poco de tiempo aquí.
‫Así que ahora podría decir, está bien, creemos una tarea para hacer eso.
‫Así que creemos una tarea que se ejecute y vamos a ejecutar un código aquí.
‫Así que voy a copiar el código allí de esa manera.
‫Y ahora depuremos eso.
‫Así que agreguemos un pequeño punto de depuración aquí.
‫Así que sigamos adelante y depuremos eso solo para ver qué subprocesos están realmente involucrados.
‫Entonces voy a presionar el botón y estamos dentro de este hilo.
‫Y eso es así, tenemos varios subprocesos de trabajo donde la principal amenaza, que es la
‫amenaza, y lo vimos antes cuando ejecutamos algo.
‫Entonces, si la amenaza principal y luego ejecutamos nuestra tarea, que también tiene una amenaza, estamos en la amenaza cinco.
‫Entonces, pueden ver que la amenaza cinco es una amenaza para los trabajadores, y esa es la que tenemos aquí.
‫Así que vayamos al siguiente paso.
‫Todavía estamos en ejecución o todavía somos una amenaza, cinco, luego hagámoslo de nuevo, todavía una amenaza cinco.
‫Ahora estamos intentando hacer algo.
‫Entonces estamos tratando de actualizar mi botón.
‫Hecho.
‫Y vayamos al siguiente paso nuevamente, como pueden ver, mi aplicación congela su expresión de evaluación, mi
‫botón.
‫Entonces estamos esperando de nuevo.
‫Muy pesado para él y como puede ver que estamos en esa operación, la excepción al hilo de llamada
‫no puede acceder al objeto porque un hilo diferente lo posee.
‫¿Qué significa eso?
‫Bueno, significa que mi botón es propiedad de un hilo diferente.
‫¿Y por qué hilo?
‫Bueno, es propiedad del hilo de la interfaz de usuario, que es nuestro hilo principal.
‫Entonces, el hilo principal es responsable de cuidar todos los elementos de la interfaz de usuario para que no se congelen.
‫Es importante que siempre responda y, en este caso, ya no responde porque estamos tratando
‫de acceder a esta línea de código aunque no esté en el hilo correcto.
‫Así que estamos en el hilo cinco y estamos intentando acceder a algo que pertenece al hilo uno y eso es algo que
‫no es válido.
‫Entonces obtenemos esta excepción de operación no válida aquí y necesitamos encontrar una solución diferente para administrarla.
‫Y generalmente es un concepto de diferentes amenazas.
‫Entonces, generalmente, debe tener cuidado cuando trabaja con diferentes subprocesos y con diferentes objetos.
‫Si los objetos pertenecen a otros subprocesos, no puede cambiarlos ni modificarlos.
‫Entonces eso es algo de lo que debes estar consciente.
‫Entonces, ¿cómo podemos hacer eso?
‫Bueno, en general, paremos primero y vayamos al botón, por lo tanto, y creemos un botón aquí.
‫Y quiero ver el botón presionando el control o manteniendo presionado el control y presionando el botón.
‫Entonces Button hereda de la base del botón, que es un control constante, que hereda del control, del elemento del marco,
‫del elemento de la interfaz de usuario.
‫Que es un objeto visual, que es un objeto de dependencia, un objeto despachador que somos, así que es un
‫objeto despachador y aquí solo verifica el acceso y un acceso muy combativo.
‫Entonces, este es un objeto de despachador y estamos usando un despachador aquí y el despachador tiene muchas variables,
‫eventos, etc.
‫¿Por qué te muestro eso?
‫Bueno, es porque usaremos el dispatcher para administrar nuestro hilo por ellos.
‫Mi botón.
‫Entonces, ¿qué debo hacer aquí?
‫Bueno, necesito mi despachador de puntos de botón para que las ventanas sean amenazadoras.
‫Dispatcher Las ventanas del sistema dejan de amenazar al objeto de dispatcher al que está asociado.
‫Así que ahora averiguamos qué hilo pertenece a nuestro botón o realmente a cuál Fred.
‫Nuestro botón pertenece.
‫Entonces, revisemos el despachador y aquí invoco ejecuta la acción especificada de forma asincrónica en el hilo, las
‫ventanas del sistema con el que está asociado este despachador.
‫Así que eso es exactamente de lo que estaba hablando, lo que tenemos que hacer.
‫Así que sigamos adelante y hagamos eso y ejecutemos el código aquí ahora.
‫Así que voy a cerrarlo en la parte inferior.
‫Y ahora puede ver que ahora puede seguir adelante y decir, OK, el contenido de mi botón solo dice listo
‫y voy a usar la depuración una vez más para ver en qué amenaza estoy en este punto.
‫Entonces, ejecutemos el código nuevamente.
‫Ahora, presionemos el botón.
‫Y como puede ver, estamos aquí ahora.
‫E iba a necesitar evaluar mucho de nuevo para que estemos en el hilo cinco ahora.
‫Aquí es donde hacemos la depuración.
‫Luego pasamos al siguiente hilo o línea siguiente.
‫Línea siguiente.
‫Y luego la interfaz de usuario vuelve a estar en marcha.
‫¿Dónde aquí?
‫Y ahora podemos pasar al siguiente paso.
‫Así que estamos en el despachador y él realmente salta sobre lo que quería mostrarles.
‫Así que echémosle un vistazo, vayamos a Windows y veamos la consola de depuración, que es la salida, por lo que
‫dice la amenaza número cinco.
‫Y luego dijo la amenaza número uno.
‫Así que esta es la amenaza número uno y la amenaza número cinco.
‫Entonces, el propietario del botón, como puede ver, es la amenaza número uno.
‫Y para dejar eso un poco más claro, podríamos agregar eso a nuestra línea aquí.
‫La amenaza número uno o la amenaza número fulano de tal es dueña de mi botón.
‫Así que ahora seremos un poco más claros.
‫Ejecútelo de nuevo y luego debería mostrarse correctamente.
‫Así que aquí está el resultado y todavía no hay nada interesante.
‫Presionamos el botón y ves que se ejecutó la amenaza número cinco y luego comienza a descargarse.
‫Y uno, no es una vez que está hecho, dice aquí amenaza.
‫Nadie es dueño de mi botón.
‫Así que presionemos de nuevo.
‫Y ahora, como puede ver, el botón aún funciona y aún se está actualizando.
‫Entonces eso es bueno.
‫Y esa es una forma de hacerlo.
‫Sin embargo, hay otra forma, y les mostraré otra, que es la solución preferida.
‫Entonces voy a copiar esto.
‫Mi botón hace clic.
‫Lo llamaré mi botón para hacer clic para que no interfiera.
‫Y ahora voy a decir a qué amenaza estoy afuera.
‫Entonces, ¿qué amenaza soy cuando hago clic en el botón?
‫Bueno, entonces debería estar en rojo.
‫Voy a usar una tarea de peso.
‫Ejecutar esa tarea debería ser una tarea asíncrona.
‫Por lo tanto, debemos agregar la palabra clave asincrónica aquí.
‫Un estudio visual todavía no está muy contento.
‫Entonces necesito hacer que este método sea asincrónico.
‫Entonces, el clic de mi botón ahora será un método de botón asincrónico que esperará una tarea específica para ejecutarse
‫de forma asincrónica.
‫Y lo que hago aquí es simplemente descargar este archivo nuevamente.
‫Y en lugar de usar un despachador, lo que puedo hacer ahora es actualizar mi botón fuera de esta
‫tarea.
‫Así que lo haré aquí afuera.
‫Voy a decir el contenido de mi botón y va a decir algo que he descargado.
‫Eso es todo.
‫Así que ahora, en lugar de hacerlo con un despachador, lo cual fue un poco complicado, lo hago asincrónico.
‫Así que ahora también debería funcionar bien.
‫Ahora, para probar eso, voy a cambiar el método aquí para hacer clic en el método para hacer clic en el botón.
‫De lo contrario, este método nunca se ejecutaría.
‫Así que hagámoslo.
‫Y tal vez eso también agregue en qué hilo estamos.
‫Así que el hilo no está tan sin resolver antes de una tarea en espera.
‫Y luego este es después de una tarea de peso y ese será durante una tarea de peso.
‫Así que ahora vamos a ejecutarlo de nuevo.
‫Presionemos nuestro botón.
‫Y aquí lo ves antes de TASC.
‫No había nadie entonces durante una tarea de peso que era el hilo número dos y después de la tarea de peso, está en
‫el número uno nuevamente y terminamos la descarga.
‫Así que ese es un enfoque diferente que también funciona perfectamente.
‫Y esa es una forma aún mejor.
‫Por lo tanto, no tiene que seguir el camino de la verificación, que amenazó a la mía.
‫Pero creas un hilo diferente donde haces cosas.
‫Pero y también lo conviertes en un peso.
‫Entonces lo haces asincrónico.
‫Ahora, algo que también quiero mostrarles es un navegador web, así que lo que voy a hacer aquí
‫es reducir el tamaño del botón.
‫Lo pondré aquí en la esquina superior izquierda y usaré un navegador web.
‫Voy a arrastrarlo allí y hacerlo un poco más grande.
‫Así que ahora solo tendremos este navegador web y debería mostrarnos el lado en el que estamos.
‫Entonces, lo que sucederá es que cada vez que presione el botón, voy a descargar un sitio web
‫específico, que definiré manualmente.
‫Así que este es solo un pequeño ejemplo para agregar a lo que hemos visto hasta ahora.
‫No voy a entrar en un navegador web completo.
‫No te voy a mostrar cómo hacer eso.
‫Puede seguir adelante y probarlo usted mismo.
‫Solo le mostraré cómo puede usar ese HTML que ha
‫descargado de este enlace específico, que está codificado y es fácil de usar o mostrarlo en un navegador web.
‫Entonces https Google punto com.
‫Entonces, lo que sucederá es que cada vez que presione el botón, se descargará Google dot com.
‫Ahora, para hacer eso, necesito tener un método específico y no voy a escribirlo manualmente.
‫Solo voy a copiarlo y pegarlo aquí.
‫Por lo tanto, este método de cambio de HTML se llamará siempre que se cambie una propiedad de dependencia.
‫Entonces, lo que voy a decir aquí es que el cambio de HTML necesita un objeto de dependencia y un argumento de evento de
‫cambio de propiedad de dependencia, que se llama E aquí.
‫Solo estoy creando un navegador web que tomará ese objeto de dependencia y lo usará como navegador web.
‫Y luego, si el navegador web no es nulo, navegue hasta una cadena específica, que será un nuevo valor
‫como cadena.
‫Entonces, cualesquiera que sean esos argumentos de dependencia, la propiedad cambió, los argumentos de evento son.
‫De ahí es de donde saco la cuerda.
‫Así que eso es prácticamente lo que debe mostrarse en el navegador web.
‫Entonces lo hubiera hecho fácil de una manera más fácil.
‫Pero el problema es que no es tan fácil de hacer.
‫Así que no hay formas más fáciles o muchas formas más fáciles de hacer eso.
‫Entonces, ese es generalmente el enfoque que debería hacer aquí.
‫Entonces, en lugar de simplemente actualizar el botón con la descarga de Dan, quiero actualizar el navegador web y, por lo tanto, el navegador
‫web necesita un nombre.
‫Así que le daré un nombre al navegador web y lo llamaré mi navegador web.
‫Ahora, el navegador web, lo llamaré aquí o, de hecho, lo modificaré aquí.
‫Lo que quiero hacer es establecer el valor de ese navegador y quiero configurarlo con algo.
‫Y puede ver que necesitamos la propiedad de dependencia y un objeto que sea de valor.
‫Entonces, ¿cómo consigo eso?
‫¿De dónde saco eso?
‫Bueno, hay muchas cosas aquí.
‫Uno de ellos es que necesitamos una propiedad de dependencia, así que creemos una.
‫Pongámoslo aquí arriba.
‫Y nuevamente, solo voy a copiarlo y pegarlo.
‫Les voy a mostrar cómo se ve y qué hace.
‫Por lo tanto, es una propiedad de dependencia de solo lectura llamada propiedad HTML.
‫Y nos registramos.
‫Se registrará con HTML.
‫Como puede ver, necesita un nombre, cadena, nombre, HTML, luego un tipo de propiedad, un tipo de propietario y metadatos
‫de propiedad.
‫Eso es algo que hemos abordado cuando trabajamos con propiedades de dependencia en el capítulo de la UPF.
‫Así que aquí acabo de crear con HTML.
‫El tipo es una cadena.
‫Cual es el dueño.
‫Es la ventana principal.
‫Entonces nuestra clase aquí.
‫Y qué tipo de datos es este o qué metadatos quiero darle y le doy los metadatos
‫cambiados en html.
‫Entonces que significa eso.
‫Bueno, siempre que establezcamos la propiedad en HTML, se llamará al cambio y ese es este método aquí al que se
‫llamará.
‫Entonces, ahora lo que podemos hacer es configurar el valor de mi navegador con lo siguiente.
‫Podemos seguir adelante y decir propiedad HTML y configurarla con HTML para usar HTML.
‫Necesitamos hacer una pequeña solución aquí o tener una pequeña solución.
‫En realidad, lo llamaré mi HTML así y necesito crear una variable aquí, que
‫será una cadena de mi T y L que solo dirá bla, solo una cadena que tiene un texto estúpido en aquí.
‫Nada especial.
‫Pero luego, una vez que termina la descarga, obtenemos el resultado en nuestra cadena HTML.
‫No podría simplemente decir HTML aquí porque esta cadena se crea localmente y no puedo crearla
‫o está dentro del alcance de nuestra tarea aquí y no puedo crearla fuera.
‫Es por eso que necesito tener esta pequeña solución para poder seguir adelante y decir que mi HTML es HTML.
‫Así que esto.
‫Variable aquí, que está en el alcance de nuestro navegador web, dijimos aquí, por eso puedo seguir adelante
‫y configurarlo aquí.
‫Así que dentro del alcance de nuestra tarea pendiente.
‫Ahora, por supuesto, tenemos que terminar esta línea.
‫Así que esa es la forma en que puede establecer el valor de un navegador web.
‫Está bien, es un poco de solución, pero funciona, así que probémoslo, ejecutemos nuestro código.
‫Presionemos el botón.
‫Y lo estamos, por lo que tenemos muchos errores de script, pero eso se debe a que no hemos dicho nada más.
‫Pero como puede ver aquí, ahora estamos en Google, por lo que podemos ir a imágenes, a Google Maps, etc.
‫Así que ahora hemos creado nuestro pequeño navegador, que simplemente nos lleva a Google.
‫Está bien, genial.
‫Entonces, como dije, no voy a profundizar demasiado en los navegadores y esas cosas, y ni siquiera quería profundizar
‫demasiado en esos temas.
‫Pero esa es la forma en que tienes que configurarlo.
‫Eso es un poco, eh, sí.
‫Una pequeña configuración que debes hacer.
‫Entonces necesitas tener este método.
‫Debe tener esta propiedad de dependencia, y luego puede continuar y establecer el valor
‫de su navegador con la propiedad HTML, que es nuestra propiedad de dependencia y algo de código HTML, que es el código
‫original que descargamos de Google punto com.
‫O simplemente para resumir rápidamente una vez más, ¿cuál es la idea de usar diferentes hilos?
‫Bueno, tienes la amenaza principal que maneja la interfaz de usuario y si quieres hacer algo que es
‫pesado, por lo que lleva un poco de tiempo, por ejemplo, descargar de la web, por ejemplo, copiar algo de un archivo
‫a otro o trabajar con discos duros o lo que sea, eso es lo que realmente tiene sentido hacer eso
‫en segundo plano.
‫Entonces creas una tarea diferente o un hilo diferente que se encarga de eso.
‫Así que aquí creamos una tarea asincrónica que hace eso en segundo plano.
‫Y una vez hecho esto, podemos seguir adelante con el resto.
‫Así que no congelará nuestro hilo principal.
‫Nuestra interfaz de usuario seguirá funcionando correctamente, y de eso se trata.
‫Está bien.
‫Así que nos vemos en el.