Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: MC.cover en 6 Noviembre 2016, 02:11 am



Título: procesos en segundo plano y cargas
Publicado por: MC.cover en 6 Noviembre 2016, 02:11 am
Hola muy buenas tengo un pequeño problema y espero me puedan ayudar :) .
Empecemos explicando: Soy nuevo utilizando procesos en paralelo y desames.
Mi problema es el siguiente:

Tengo una ventana de LogIn en la cual quiero que cuando se le de a ingresar aparezca un ProcessRing(Estoy utilizando MahApps Metro en una app WPF) y el cual en segundo plano valla cargando la visual que sigue y cuando este termine de cargar el ProcessRing se detenga y desaparezca cerrando la visual y abriendo la otra. Para intentar hacer esto cree el siguiente código:

(Cabe aclarar que tambien quiero que mientras este el ProcessRing se la visual quede inutilizable)
 
Código
  1. Imports System.ComponentModel
  2. Imports MahApps.Metro.Controls
  3. Imports MahApps.Metro.Controls.Dialogs
  4.  
  5. Public Class LogicLogIn : Inherits MetroWindow
  6.  
  7.    Dim bw As New BackgroundWorker
  8.  
  9.    Sub New()
  10.        InitializeComponent()
  11.        bw.WorkerReportsProgress = True
  12.        AddHandler bw.DoWork, AddressOf bw_DoWork
  13.        AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted
  14.    End Sub
  15.  
  16.    Private Sub BtnLogIn_Click(sender As Object, e As RoutedEventArgs) Handles BtnLogIn.Click
  17.        If TxtUser.Text.Equals("") Or TxtPass.Password.ToString.Equals("") Then
  18.            Me.ShowMessageAsync("Alerta", "Usuario o Contraseña incorrecta")
  19.        Else
  20.            Ring.Visibility = Visibility.Visible
  21.            Ring.IsActive = True
  22.            If Not bw.IsBusy = True Then
  23.                bw.RunWorkerAsync()
  24.            End If
  25.        End If
  26.  
  27.    End Sub
  28.  
  29.    Private Sub bw_DoWork(sender As Object, e As DoWorkEventArgs)
  30.        Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
  31.        Dim menu As New LogicMainMenu()
  32.        Me.Close()
  33.        menu.ShowDialog()
  34.    End Sub
  35.  
  36.    Private Sub bw_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
  37.        If e.Cancelled = True Then
  38.            'si se cancela
  39.        ElseIf e.Error IsNot Nothing Then
  40.            'si hay algun error al hacerce la tarea en el hilo
  41.            MsgBox(e.Error.Message.ToString)
  42.        Else
  43.            Ring.IsActive = False
  44.            Ring.Visibility = Visibility.Hidden
  45.        End If
  46.    End Sub
  47.  
  48. End Class

La cosa esta que a la hora de ejecución cuando cumplo los valores de validación y le doy al botón aceptar aparece el ProcessRing se activa y me lanza un error.

Les dejo imágenes del programa:
Img 1
(https://k61.kn3.net/9/1/9/2/8/5/D67.png)

Img2
(https://k60.kn3.net/D/1/8/7/7/0/B31.png)

Img 3
(https://k60.kn3.net/8/E/B/5/7/D/8CB.png)

Espero me puedan ayudar desde Ya muchas gracias :)