elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [SOLUCIONADO] Problema con Application.DoEvents()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Problema con Application.DoEvents()  (Leído 10,138 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
[SOLUCIONADO] Problema con Application.DoEvents()
« en: 16 Enero 2013, 14:19 pm »

Estoy teniendo problemas con esto:
Código
  1.  Thread_Split.Start()
  2.        While Not Thread_is_completed = True
  3.            Application.DoEvents()
  4.        End While

Cuando inicio el thread por segunda vez, me salta este error:
Código:
Arithmetic operation resulted in an overflow.

¿Porqué?


« Última modificación: 16 Enero 2013, 18:06 pm por EleKtro H@cker » En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Problema con Application.DoEvents()
« Respuesta #1 en: 16 Enero 2013, 15:20 pm »

Pero el problema no se si esta ahi, el problema esta en el pedazo de codigo que no has puesto, donde realiza esa operacion como dice el error.

De todas formas, esta bien esa forma de usar DoEvents? si estas usando threads no seria necesario, creo yo.. que alguien me lo confirme.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: Problema con Application.DoEvents()
« Respuesta #2 en: 16 Enero 2013, 15:30 pm »

Edu,
¿Como le harías tu?

La intención del código de arriba es esto:

Código:
      Thread_Split.Start() ' Ejecutar el thread
           ' ( Al acabar el thread la variable booleana se vuelve TRUE )
           Hasta que "Variable booleana" séa igual a "True"
               No hacer nada de nada
           End While

Si no encuentro solución pronto arreglaré un poco el thread para postearlo...

Gracias y Saludos.
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Problema con Application.DoEvents()
« Respuesta #3 en: 16 Enero 2013, 15:42 pm »

¿Por que usas un thread?, si estas esperando a que el thread termine, ¿en que se diferenciaría de ejecutarlo en el "main"?

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: Problema con Application.DoEvents()
« Respuesta #4 en: 16 Enero 2013, 15:55 pm »

Se diferencia en que la aplicación no se "cuelga" al usar un while + aplication.doevents() :-/

De alguna manera tengo que esperar hasta que el thread mande una respuesta como diciendo "he acabado mi trabajo", por ejemplo para cambiar el estado de un botón:

Botón con texto "Start" > inicia el thread > cambia el texto a "STOP"
hasta que el thread no acabe el texto del botón no vuelve a ser "Start".

¿Me entienden?
En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Problema con Application.DoEvents()
« Respuesta #5 en: 16 Enero 2013, 16:06 pm »

Application.DoEvents() es una instrucción propia de VB6 y ésto es .NET. No es recomendable emplear técnicas vb6 en VB.NET pues para algo tenemos el Framework.
Supongo que lo que quieres es que se ejecute un hilo y se detenga la ejecucción del código que sigue después de la llamada .Start() del hilo hasta que el Thread haya terminado su ejección.

Empleando la clase ManualResetEvent bloqueas la ejecucción del código hasta que el objeto que contiene la instancia de ManualResetEvent haya recibido una señal.

Ejemplo:

Código
  1. Dim manualEvent As New ManualResetEvent(False)
  2. Private Sub ThreadProc(Byval Parametros As Object()) 'Pasamos todos los parametros por valor dentro de un Array de tipo Object
  3. 'Extraemos los parametros
  4. 'Ejecutamos las instrucciones de este método
  5. '...
  6.  
  7. 'Mandamos la señal a ManualEvent diciendole que siga con la ejecucción del programa
  8. ManualEvent.Set()
  9. End Sub
  10.  
  11. Private Sub EjecutarThread()
  12. Dim t as new thread(AddressOf ThreadProc)
  13. t.start(obj()) 'Le pasas al thread el array que contiene los parámetros
  14.  
  15. 'Esperamos hasta que ManualEvent reciba la señal
  16. ManualEvent.WaitOne()
  17. MsgBox("Thread Completado")
  18. End Sub
En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: Problema con Application.DoEvents()
« Respuesta #6 en: 16 Enero 2013, 16:12 pm »

Gracias Kubox, luego intento hacer eso porque es un poco lío para mí xD


De todas formas creo que el problema no tiene nada que ver con el thread.

MsgBox(Thread_is_completed) ' el valor es False
Me da exactamente el mismo error que he comentado en el primer comentario... aritmetic bla bla bla...


Me he equivocado con eso.

¿Porqué? :(
« Última modificación: 16 Enero 2013, 16:19 pm por EleKtro H@cker » En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Problema con Application.DoEvents()
« Respuesta #7 en: 16 Enero 2013, 16:26 pm »

Pero el error habla de una operacion aritmetica que se desborda, tienes que dejar el pedazo de codigo de tu thread
En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Problema con Application.DoEvents()
« Respuesta #8 en: 16 Enero 2013, 16:43 pm »

El código que te puse es para que veas como trabajando con señales puedes bloquear procesos y ponerlos a la espera de una señal. En cuanto a el error que obtienes, como dice $Edu$ se produce al tratar un tipo de dato no comprendido entre los límites establecidos de dicho tipo de dato. Por ejemplo el tipo de variable Integer soporta números comprendidos entre -2147483647 y +2147483647, si te salieras de ese límite se produciría el OverFlow.

Revisa el código del Thread en busca de posibles errores en los datos que almacenas en las distintas variables. Te recomiendo que Debuguees la aplicación para ver que valores van tomando éstas.

Saludos!
En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: Problema con Application.DoEvents()
« Respuesta #9 en: 16 Enero 2013, 16:45 pm »

EDITO:

Ya lo he arreglado, era culpa de la maldita barra de progreso extendida y su propiedad "textshow",si le sumaba un valor sin que hubiera ningún valor que mostrar, da error".

Saludos!






Pues no, con lo de antes no me equivocaba, me salta error hasta por esto!:

Código
  1.   Thread_Split.Start()
  2.        MsgBox("a")

El msgbox me salta error de operación aritmética, juas!!!! no lo entiendo...

Ahora mismo me encuentro tocando todo el thread para intentar solucionarlo, lo siento si no es muy bonito ni uso técnicas tán avanzadas como la que ha comentado Kubox xD...


Este es el botón que llama al thread, bueno, es un botón para llamarlo, y otro para abortarlo.
Código
  1. #Region " Button Split "
  2.  
  3.    ' Button SPLIT
  4.    Private Sub Button_Split_ClickButtonArea(Sender As Object, e As MouseEventArgs) Handles Button_Split.ClickButtonArea
  5.  
  6.        'Try : Thread_Split.Abort() : Catch : End Try
  7.  
  8.        Thread_is_completed = False
  9.        Thread_Split = New Threading.Thread(AddressOf Split_Thread)
  10.        Thread_Split.IsBackground = True
  11.  
  12.        Thread_Split.Start()
  13.  
  14.        MsgBox("a") ' esto da error cuando inicio el thread por segunda vez....juas...
  15.  
  16.        While Not Thread_is_completed = True
  17.            Application.DoEvents()
  18.        End While
  19.  
  20.        'Thread_is_completed = True
  21.        Want_to_cancel_thread = False
  22.  
  23.    End Sub
  24.  
  25.  
  26.    ' Button STOP
  27.    Private Sub Button_Stop_ClickButtonArea(Sender As Object, e As MouseEventArgs) Handles Button_Stop.ClickButtonArea
  28.        Want_to_cancel_thread = True
  29.        ' Try : Thread_Split.Abort() : Catch : End Try
  30.        ' Thread_is_completed = True
  31.        Kill_Process("7z")
  32.        Kill_Process("rar")
  33.    End Sub
  34.  
  35. #End Region


el thread:


Código
  1. #Region " Split Thread "
  2.  
  3.    Sub Split_Thread()
  4.        TotalFiles_Number = 0
  5.  
  6.        If Copy_Mode = "Copy" Or Copy_Mode = "Move" And Not Want_to_cancel_thread = True Then
  7.            If Not Want_to_cancel_thread = True Then
  8.                Get_All_Files(New IO.DirectoryInfo(Selected_Directory))
  9.  
  10.                ' ProgressBar
  11.                InvokeControl(ProgBarPlus, Sub(x) x.Max = TotalFiles_Number)
  12.                If Copy_Mode = "Copy" Then : InvokeControl(ProgBarPlus, Sub(x) x.TextFormat = "Copying {0} of {2} files")
  13.                ElseIf Copy_Mode = "Move" Then : InvokeControl(ProgBarPlus, Sub(x) x.TextFormat = "Moving {0} of {2} files")
  14.                End If
  15.                InvokeControl(ProgBarPlus, Sub(x) x.TextShow = ProgBar.ProgBarPlus.eTextShow.FormatString)
  16.  
  17.                ' Copy /Move
  18.                Dim FolderNum As Integer = 1
  19.                For Each File In Files_List
  20.                    If Not Want_to_cancel_thread = True Then
  21.                        Cached_Size += File.Split("|")(2)
  22.                        If Not Cached_Size >= Selected_Disc_Bytes Then
  23.                            If Copy_Mode = "Copy" Then Copy_File(File.Split("|")(0) & "\" & File.Split("|")(1), Selected_Output_Directory & "\Disc " & FolderNum & Get_File_Info(File.Split("|")(0) & "\" & File.Split("|")(1), DirectoryName).ToString.Split(":")(1), True, True)
  24.                            'If Copy_Mode = "Move" Then Move_File(File.Split("|")(0) & "\" & File.Split("|")(1), Selected_Output_Directory & "\Disc " & FolderNum & Get_File_Info(File.Split("|")(0) & "\" & File.Split("|")(1), DirectoryName).ToString.Split(":")(1), True, True)
  25.                        Else
  26.                            Cached_Size = Nothing
  27.                            FolderNum += 1
  28.                            If Copy_Mode = "Copy" Then Copy_File(File.Split("|")(0) & "\" & File.Split("|")(1), Selected_Output_Directory & "\Disc " & FolderNum & Get_File_Info(File.Split("|")(0) & "\" & File.Split("|")(1), DirectoryName).ToString.Split(":")(1), True, True)
  29.                            'If Copy_Mode = "Move" Then Move_File(File.Split("|")(0) & "\" & File.Split("|")(1), Selected_Output_Directory & "\Disc " & FolderNum & Get_File_Info(File.Split("|")(0) & "\" & File.Split("|")(1), DirectoryName).ToString.Split(":")(1), True, True)
  30.                        End If
  31.                        InvokeControl(ProgBarPlus, Sub(x) x.Value += 1)
  32.                    Else
  33.                        Want_to_cancel_thread = False
  34.                        Thread_is_completed = True
  35.                        'Try : Thread_Split.Abort() : Catch : End Try
  36.                        Exit For
  37.                    End If
  38.                Next
  39.            End If
  40.  
  41.        ElseIf Copy_Mode = "7Zip" And Not Want_to_cancel_thread = True Then
  42.            InvokeControl(ProgBarPlus, Sub(x) x.TextFormat = "Progress is not avaliable for 7Zip")
  43.            InvokeControl(ProgBarPlus, Sub(x) x.TextShow = ProgBar.ProgBarPlus.eTextShow.FormatString)
  44.            Run_Process("7z.exe", " a " & """" & Selected_Output_Directory & "\Disc.7z" & """" & " " & """" & Selected_Directory & """" & " -v" & Selected_Disc_Bytes.ToString & "b " & " -m0=BCJ -bd -y", False, True)
  45.  
  46.        ElseIf Copy_Mode = "Rar" And Not Want_to_cancel_thread = True Then
  47.            InvokeControl(ProgBarPlus, Sub(x) x.TextFormat = "Progress is not avaliable for Rar")
  48.            InvokeControl(ProgBarPlus, Sub(x) x.TextShow = ProgBar.ProgBarPlus.eTextShow.FormatString)
  49.            Run_Process("RAR.exe", " a " & """" & Selected_Output_Directory & "\Disc.rar" & """" & " " & """" & Selected_Directory & """" & " -v" & Selected_Disc_Bytes.ToString & "b " & " -m0  -ibck -o+", False, True)
  50.  
  51.        ElseIf Copy_Mode = "Exe" And Not Want_to_cancel_thread = True Then
  52.            InvokeControl(ProgBarPlus, Sub(x) x.TextFormat = "Progress is not avaliable for Exe")
  53.            InvokeControl(ProgBarPlus, Sub(x) x.TextShow = ProgBar.ProgBarPlus.eTextShow.FormatString)
  54.            Run_Process("RAR.exe", " a -sfx " & """" & Selected_Output_Directory & "\Disc.exe" & """" & " " & """" & Selected_Directory & """" & " -v" & Selected_Disc_Bytes.ToString & "b " & " -m0  -ibck -o+", False, True)
  55.  
  56.        End If
  57.  
  58.        MessageBox.Show("All files compressed", "Splitty 1.2", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
  59.        Want_to_cancel_thread = False
  60.        Thread_is_completed = True
  61.        'Try : Thread_Split.Abort() : Catch : End Try
  62.        'Exit Sub
  63.    End Sub
  64.  
  65. #End Region
  66.  
« Última modificación: 16 Enero 2013, 17:19 pm por EleKtro H@cker » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
DoEvents???
Programación Visual Basic
Bb-7 6 6,307 Último mensaje 26 Febrero 2008, 05:40 am
por Mr. Crowley
DoEvents se cuelga!
Programación Visual Basic
pandoro 3 1,931 Último mensaje 4 Junio 2008, 21:22 pm
por Mad Antrax
[VBS] Duda con Excel.application (WXP=W7?)
Scripting
klaine 1 2,503 Último mensaje 8 Abril 2011, 02:41 am
por Novlucker
Introducción a los Web Application Firewalls (WAF)
Seguridad
madpitbull_99 4 7,063 Último mensaje 15 Julio 2011, 18:33 pm
por Dr [F]
[VBS] IternetExplorer.Application
Scripting
klaine 8 4,115 Último mensaje 25 Julio 2011, 23:43 pm
por klaine
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines