Task, progreso y cancelación

Descripción general

Este documento muestra como enviar un informe de progresos, y como cancelar la tarea

El código que se muestra a continuación, se compone de un formulario con dos botones [Prueba] y [Cancelar] y un TextBox donde se muestra el proceso [TextBox1]

Código XAML


<Window  x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Title="Window1" Height="450" Width="800">
    <Grid>
    <Grid.RowDefinitions>
    <RowDefinition  Height="Auto" />
    <RowDefinition  Height="*" />
    </Grid.RowDefinitions>

    <StackPanel  Grid.Row="0"  Orientation="Horizontal">
    <Button  x:Name="ButtonPrueba" Content="Prueba" HorizontalAlignment="Left" VerticalAlignment="Top" 
    Margin="0,0,10,0"  Click="ButtonPrueba_Click" />
    <Button  x:Name="ButtonCancelar" Content="Cancelar" HorizontalAlignment="Left" VerticalAlignment="Top" 
    Margin="0,0,10,0" Click="ButtonCancelar_Click"/>
    <Button  x:Name="ButtonTerminar" Content="Terminar" HorizontalAlignment="Left" VerticalAlignment="Top" 
    Margin="0,0,10,0" Click="ButtonTerminar_Click"/>
          
    <TextBox   x:Name="TextBoxContador" HorizontalAlignment="Left"  VerticalAlignment="Top"  Width="100"/>

    </StackPanel>
    <TextBox   Grid.Row="1" x:Name="TextBoxResultados"
    HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" VerticalScrollBarVisibility="Visible" />
    </Grid>
</Window>

Código VB.NET (8.0)


Imports System.Threading 

Public Class Window1 


    '  Para el informe de progreso. 
    Dim progress As New Progress(Of Integer)(Function(paramPorcentaje)
                                                 TextBoxContador.Text = paramPorcentaje & "%" 
    Return paramPorcentaje 
    End Function)


    ' Define el token de cancelación. 
    Private sourceCancellationToken As New CancellationTokenSource()
    Private tokenCancellation As CancellationToken = sourceCancellationToken.Token 


    Private Sub ButtonTerminar_Click(sender As Object,e As RoutedEventArgs)
        Me.Close()
        e.Handled = True 
    End Sub 


    Private Sub ButtonCancelar_Click(sender As Object,e As RoutedEventArgs)
        sourceCancellationToken.Cancel()
        e.Handled = True 
    End Sub 


    Private Async Sub ButtonPrueba_Click(sender As Object,e As RoutedEventArgs)

        TextBoxResultados.Text = "Empezando!" 
        TextBoxResultados.Text & = Environment.NewLine 

    'DoProcessing se ejecuta en el grupo de subprocesos. 
    Await Task.Run(Function()
    Return DoProcessing(progress,tokenCancellation)
    End Function)


        TextBoxResultados.Text & = "Terminado!" 
        e.Handled = True 
    End Sub 


    Public Shared Function DoProcessing(ByVal progress As IProgress(Of Integer),ByVal tokenCancelacion As CancellationToken)As Integer 
    Dim i As Integer = 0 
    While i <> 100 

    ' la cancelación del proceso 
    If Not(tokenCancelacion = Nothing)Then 
    If tokenCancelacion.IsCancellationRequested = True Then 
    Exit While 
    End If 
    End If 

    ' simular una tarea costosa 
            Thread.Sleep(100)

    ' informe de progreso 
    If progress IsNot Nothing Then 
    progress.Report(i)
    End If 
    ' dar otra vuelta 
    i + = 1 
    End While 
    'valor que se devuelve 
        Return i 
    End Function 

End Class 


↑↑↑

A.2.Enlaces

[Para saber mas]
[Grupo de documentos]
[Documento Index]
[Documento Start]
[Imprimir el Documento]
© 1997 - - La Güeb de Joaquín
Joaquín Medina Serrano
Ésta página es española

Codificación
Fecha de creación
Última actualización
[HTML5 Desarrollado usando CSS3]