Cuestión : Necesidad de encontrar un botón en un uso y un monotor es texto

Tengo usar VB6sp6 podido localizar un botón y supervisarlo es cambio del texto/del subtítulo usar llamadas del API. Ahora me encargan con la puesta al día de mi programa a VB.NET (estoy utilizando VS2008). He convertido mi app a VB.NET usar el mago en VS2008 pero como usted puede imagen apenas que aprende VB.NET yo soy un poco confuso. Tengo gusto de entender que lo que el hacer diferente y aprende pues soy. el

Let yo mención el botón está en un uso que necesito supervisar, y envía una bandera una vez que abotone sido en ese estado por 90 segundos. Podía hacer esto en VB6 pero puedo; t parece conseguirlo que trabaja en el

I de VB.NET capaz de encontrar la ventana pero incapaz de conseguir pasado que señala y encuentra el botón en el Application.

Here es lo que tengo hasta ahora; el

Here es las funciones del API que estoy utilizando. el
Public declara la liberación “user32.dll” alias “FindWindowA” de FindWindow de la función (lpClassName de ByVal como lpWindowName de la secuencia, de ByVal como secuencia) como Integer

Public declara la liberación “user32.dll” de EnumWindows de la función (lpEnumFunc de ByVal como lParam del número entero, de ByVal como número entero) como Integer

Public declara la liberación “user32.dll” de EnumChildWindows de la función (ByVal hWndParent como lpEnumFunc del número entero, de ByVal como lParam del número entero, de ByVal como número entero) pues Integer


This es lo que utilizo para encontrar la ventana….
'Set qué ventana para buscar el
vHwnd = el

I de FindWindow (“ClassName”, vbNullString) pueden suministrar más si necesidad pero… Pienso una vez que consigo pasado que el antedichos consiguen entonces a llamada en EnumChildWindows con el code
During la conversión me dio esta advertencia durante mejora y ser honesto yo están teniendo apuro el conseguir de mi mente alrededor del
del concepto… " agregar a delegado para la función FIND_RELEASE del

Public de AddressOf EnumChildProc " () como Boolean
Dim FoundRelease como Object
Dim OKButtonHwnd como Object
Dim i como Object
HwndCount = 0 'inicializa el counter
FoundReleaseButton = 'los sistemas falsos abotona no al found
RetVal = EnumChildWindows (VoipHwnd, AddressOf EnumChildProc, CInt (0))
'Looks del
para el
For i = 0 del botón del volver a conectar (botón del asimiento) a HwndCount - inglés de 1
'Search para buscar el button
If del volver a conectar mediados de (AppClass (i), 1, 6) = “botón” y mediados de (AppText (i), 1, 9) = “vuelve a conectar” y FoundRelease = falso entonces 'busca para el button
OKButtonHwnd = AppHwnd (i) 'almacén el handle
FoundRelease = 'tirón verdadero el i
Dim FlashForm del found
End If
Next del botón de interruptor como frmFlash
If FoundRelease = Then
FoundReleaseButton = True
timHold.Enabled = True
ChangeTrayIcon (yo, (Me.Image3.Image))exHoldTime del
'Seeing
If = CDbl (“90”) Then
ChangeTrayIcon (yo, (Me.Image4.Image))el
FlashForm = nuevo
FlashForm.ShowDialog ()/>FlashForm = Nothing
End If
Exit Function
End If
End Function


cualquiera ayuda o los indicadores a lo que necesito leer serían grandes… ahora que buscan para uces par de days.


class= del

Respuesta : Necesidad de encontrar un botón en un uso y un monotor es texto

La primera cosa que recomendaría está moviendo su servicio del ejecutor fuera del lazo.  Usted necesita realmente solamente crear eso una vez.  Dependiendo de su puesta en práctica, usted puede poder hacerle una variable de la clase, cualquiera los parásitos atmosféricos que son compartidos por todos los casos de esta clase o de un miembro privado si cada clase necesita su propia piscina del hilo de rosca.  Cualquier manera, mientras usted no cierre el servicio, usted podrá reutilizar esos hilos de rosca en vez de incurrir en los gastos indirectos de comenzarlos cada vez.  Si las llamadas múltiples a este método necesitan funcionar simultáneamente, mover la creación del servicio del ejecutor nuevamente dentro del método, pero fuera del lazo.

También parece usted está creando 10 piscinas del hilo de rosca, con 10 hilos de rosca cada uno para procesar cada orden.  El código que he atado se vuelve a trabajar para procesar todo proveyó de órdenes 10 hilos de rosca.
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:
clase pública ClearDownService {
    hilos de rosca privados de la internacional;
    executorService privado de ExecutorService;

    ClearDownService público (hilos de rosca de la internacional) {
        si (hilos de rosca < 1="">= 1. “);
        }
        this.threads = hilos de rosca;
        this.executorService = Executors.newFixedThreadPool (this.threads);
    }

    // I modificó su código de la iteración para asumir que usted tiene cierta colección de objetos de OrderModel
    // que usted está utilizando para conseguir el iterator.  Puesto que usted está utilizando JDK 1.5+, su mucho más
    // legible y conservable utilizar productos genéricos en vez de echar la vuelta de iterator.next ().
    // I también modificó su código de la iteración para utilizar la construcción incorporada del foreach.
    checkOrders vacíos del público (órdenes de colección) {
        // inicializa el cierre para el número total de órdenes, en vez de los hilos de rosca.
        // que esto se asegura que todas las órdenes estén procesadas antes de que este método termine
        startLatch final de CountDownLatch = nuevo CountDownLatch (orders.size ());

        // puesto que usted está utilizando JDK 1.5+, más fácil leer y mantener si usted utiliza productos genéricos
        // y el foreach incorporado en vez del iterator
        para (modelo final de OrderModel: órdenes) {
            executorService.submit (nuevo Runnable () {
                vacío del público funcionado con () {
                    intento {
                        Calendario ahora = Calendar.getInstance (TimeZone.getTimeZone (“Europa/Londres”));
                        si (isEligibleForClearDown (modelo, master.getCleardownFields () .getClearDownReqFrom (), ahora)) {
                            si (model.getOrderFields () .hasParentOrderId ()) {
                                // agrega todas las pedidos del niño al resultado final
                                results.add (modelo);
                            } {
                                // agrega pedidos del padre a la lista de padre
                                parentOrders.add (modelo);
                            }
                        }
                    } finalmente {
                        // que pone esto en finalmente un bloque se asegura que consigue llamado cueste lo que cueste
                        // de cuaesquiera excepciones que ocurran en el cuerpo del método
                        startLatch.countDown ();
                    }
                }
            });
        }
        intento {
            startLatch.await (); espera de // para todos los objetos al proceso completo
        } retén (InterruptedException e) {
            LOGGER.error (“excepción interrumpida mientras que espera el cierre de la cuenta descendiente a end.");
        }
    }
}
Otras soluciones  
 
programming4us programming4us