Problema con do while
Publicado por Marcos (3 intervenciones) el 12/07/2012 17:10:39
Amigos, hace tiempo que tengo esta traba que cuando hago aplicaciones en visual basic 2010 que realizan procesos en donde se tiene que esperar cierto tiempo por ejemplo obtener el modelo y la serie de todas las cajas de un supermercado para almacenarlas en una base de datos , en estos casos quiero colocarle una ventanita que indique por ejemplo "escaneando caja 1...", lo e intentado creando un dialog llamado frm_Escaneo_Pos el cual tiene un label que se llama num_caja y en el do while por cada ciclo le voy asignando el nombre de la caja que se esta revisando en el momento pero sin embargo cuando carga el programa durante todo el escaneo que puede variar desde 30 seg hasta 1 minuto (dependiendo del número de cajas) me muestra el label num_caja en blanco y no me muestra el número de la caja como yo quiero, es como si el programa se quedara pegado durante el proceso, entonces no tengo como mostrar el progreso del escaneo, esta aplicacion es para el area de informática de la empresa donde trabajo y si la entrego asi como esta sin indicar que se esta haciendo mientras se esta escaneando las cajas se puede interpretar como un cuelgue de la aplicación, que otra alternativa tengo amigos de alguna sentencia bucle que no me cuelgue el lbl_cajas, a continuación les detallo el código en donde escanea cada caja:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Frm_Escaneo_POS.visible=true ' aqui muestro una ventanita que indica que el programa esta escaneando las cajas
'Dim MAC As String
Do While dr.Read
'TIPO(contador) = dr.GetString(2)
'MODELO(contador) = dr.GetString(3)
'SERIE(contador) = dr.GetString(4)
IP_Caja = dr.GetString(1)
IP_POS(contador) = IP_Caja
POS = dr.GetString(0)
lbl_caja.text=POS ' Esta es la parte en donde le asigno el número de la caja para que la muestre en el frm_Escaneo_POS
'Dim results() As String = Scanner.ResolveMac(Int(dr.GetString(1)))
Estado = ping.Send(IP_Caja, 1000).Status.ToString
Estados_P(contador) = Estado
' MAC = ping.(dr.GetString(1),200)
If Estado = "Success" Then
Imagen = 0
Else
Imagen = 1
End If
ListView1.Items.Add(New ListViewItem(New String() {dr.GetString(0) & " ", dr.GetString(1), Estado, dr.GetString(2), dr.GetString(3), dr.GetString(4), dr.GetString(5), dr.GetString(6), dr.GetString(7)}, Imagen))
contador = contador + 1
Loop
dr.Close()
For z = 0 To contador - 1
If Estados_P(z) = "Success" Then
Shell("cmd /c c:\cscript\psexec.exe \\" & IP_POS(z) & " -u administrador -p unimarc -c " & Chr(34) & "c:\cscript\comm.bat" & Chr(34) & "> c:\cscript\log.log", AppWinStyle.Hide, True, 11000)
Dim objReader As New StreamReader("c:\cscript\log.log")
Dim sLine As String = ""
Dim arrText As New ArrayList()
Do
sLine = objReader.ReadLine()
If Not sLine Is Nothing Then
arrText.Add(sLine)
End If
Loop Until sLine Is Nothing
objReader.Close()
For Each sLine In arrText
If Mid(sLine, 1, 6) = "Model:" Then
Tipo_POS(z) = Mid(sLine, 7, 5)
Mod_POS(z) = Mid(sLine, 12, 3)
End If
If Mid(sLine, 1, 15) = "Serial Number2:" Then
Serie_POS(z) = Mid(sLine, 16, 9)
End If
Next
End If
Next
For Each item As ListViewItem In ListView1.Items
item.UseItemStyleForSubItems = False
If Estados_P(contador2) = "Success" Then
If item.SubItems(3).Text = Replace(Tipo_POS(contador2), " ", "") Then
item.SubItems(3).ForeColor = Color.Blue
Else
item.SubItems(3).ForeColor = Color.Red
End If
If item.SubItems(4).Text = Mod_POS(contador2) Then
item.SubItems(4).ForeColor = Color.Blue
Else
item.SubItems(4).ForeColor = Color.Red
End If
If item.SubItems(5).Text = Replace(Serie_POS(contador2), " ", "") Then
item.SubItems(5).ForeColor = Color.Blue
Else
item.SubItems(5).ForeColor = Color.Red
End If
Else
item.SubItems(3).ForeColor = Color.Gray
item.SubItems(4).ForeColor = Color.Gray
item.SubItems(5).ForeColor = Color.Gray
End If
contador2 = contador2 + 1
Next
Frm_Escaneo_POS.Close()
Valora esta pregunta
0