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]
<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>
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
© 1997 - - La Güeb de Joaquín | |||||
Joaquín Medina Serrano
|
|||||
|
Codificación | |
Fecha de creación | |
Última actualización | |