142 lines
5.0 KiB
VB.net
142 lines
5.0 KiB
VB.net
Imports System.ComponentModel
|
|
Imports System.Threading
|
|
Imports DevExpress.Xpf.Core
|
|
|
|
Public Class VentanaProgreso
|
|
Public IVentana As IVentanaProgreso
|
|
Private AutoResetEvent As New AutoResetEvent(False)
|
|
Dim worker As New BackgroundWorker
|
|
Public Cancelar As Boolean
|
|
Dim TareasProgreso As New List(Of TareaProgreso)
|
|
Public MensajeError As String
|
|
'Private _UltimaLinea As TareaProgreso
|
|
'Property UltimaLinea As TareaProgreso
|
|
' Get
|
|
' Return _UltimaLinea
|
|
' End Get
|
|
' Set(value As TareaProgreso)
|
|
' _UltimaLinea = value
|
|
' RaisePropertyChanged("UltimaLinea")
|
|
' End Set
|
|
'End Property
|
|
|
|
|
|
'Public PropertyChanged As PropertyChangedEventHandler
|
|
|
|
'Protected Overloads Sub RaisePropertyChanged(propertyName As String)
|
|
' Dim handler As PropertyChangedEventHandler = Me.PropertyChanged
|
|
' If handler IsNot Nothing Then
|
|
' Dim e = New PropertyChangedEventArgs(propertyName)
|
|
' handler(Me, e)
|
|
' End If
|
|
'End Sub
|
|
|
|
Private Sub Window_ContentRendered(sender As Object, e As EventArgs)
|
|
' DevExpress.Xpf.Core.DXGridDataController.DisableThreadingProblemsDetection = True
|
|
worker.WorkerReportsProgress = True
|
|
worker.WorkerSupportsCancellation = True
|
|
AddHandler worker.DoWork, AddressOf worker_dowork
|
|
AddHandler worker.ProgressChanged, AddressOf worker_ProgressChanged
|
|
AddHandler worker.RunWorkerCompleted, AddressOf worker_RunWorkerCompleted
|
|
worker.RunWorkerAsync()
|
|
'AutoResetEvent.WaitOne()
|
|
End Sub
|
|
|
|
Private Sub worker_dowork(sender As Object, e As DoWorkEventArgs)
|
|
Try
|
|
IVentana.IniciarTareas(sender)
|
|
Me.AutoResetEvent.Set()
|
|
|
|
Catch ex As Exception
|
|
Throw New Exception(ex.Message, ex)
|
|
' DXMessageBox.Show(ex.Message, "Atención")
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub worker_ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
|
|
Select Case e.UserState.GetType
|
|
Case GetType(TareaProgreso)
|
|
Me.ProgresoGeneral.EditValue = e.ProgressPercentage
|
|
Dim tp As TareaProgreso = e.UserState
|
|
Select Case tp.Tipo
|
|
Case TiposTareaProgresoEnum.LIMPIAR_FILAS
|
|
TareasProgreso.Clear()
|
|
Me.gc.RefreshData()
|
|
Case TiposTareaProgresoEnum.NUEVA_FILA
|
|
Dim tpe = TareasProgreso.Where(Function(t) t.id = tp.id)
|
|
If tpe.Count = 0 Then
|
|
Dim ntp As New TareaProgreso With {
|
|
.id = tp.id,
|
|
.Descripcion = tp.Descripcion,
|
|
.FechaInicio = tp.FechaInicio,
|
|
.Progreso = tp.Progreso}
|
|
tv.ScrollIntoView(gc.GetRowByListIndex(gc.VisibleRowCount - 1))
|
|
TareasProgreso.Add(ntp)
|
|
Else
|
|
tpe.First.Progreso = tp.Progreso
|
|
End If
|
|
Me.gc.RefreshData()
|
|
Case TiposTareaProgresoEnum.CAMBIO_TITULO
|
|
Me.Title = tp.Descripcion
|
|
Case TiposTareaProgresoEnum.EXCEPCION
|
|
If Not Cancelar Then
|
|
Me.MensajeError = tp.Descripcion
|
|
Cancelar = True
|
|
Me.worker.CancelAsync()
|
|
Me.AutoResetEvent.WaitOne()
|
|
End If
|
|
Case TiposTareaProgresoEnum.FINALIZAR
|
|
Cancelar = False
|
|
End Select
|
|
Case GetType([Delegate])
|
|
Dim proceso As [Delegate] = e.UserState
|
|
|
|
End Select
|
|
|
|
End Sub
|
|
|
|
Private Sub btCancelar_Click(sender As Object, e As RoutedEventArgs)
|
|
Cancelar = IVentana.Cancelar 'true
|
|
If Cancelar Then
|
|
Me.worker.CancelAsync()
|
|
Me.AutoResetEvent.WaitOne()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub worker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
|
|
'Me.DialogResult = Not (Cancelar)
|
|
' DirectCast(sender, BackgroundWorker).Dispose()
|
|
Me.Close()
|
|
|
|
End Sub
|
|
|
|
Private Sub VentanaProgreso_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
|
Me.gc.ItemsSource = TareasProgreso
|
|
End Sub
|
|
|
|
Public Sub New()
|
|
|
|
' Llamada necesaria para el diseñador.
|
|
Cancelar = False
|
|
InitializeComponent()
|
|
|
|
' Agregue cualquier inicialización después de la llamada a InitializeComponent().
|
|
|
|
End Sub
|
|
End Class
|
|
Public Class TareaProgreso
|
|
Property id As Integer
|
|
Property Tipo As TiposTareaProgresoEnum
|
|
Property FechaInicio As DateTime
|
|
Property Descripcion As String
|
|
Property Progreso As Integer
|
|
|
|
End Class
|
|
Public Enum TiposTareaProgresoEnum
|
|
LIMPIAR_FILAS
|
|
NUEVA_FILA
|
|
CAMBIO_TITULO
|
|
EXCEPCION
|
|
FINALIZAR
|
|
End Enum
|