Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [VB2010] Cosa può "chiamare" un BackGroundWorker?

    L' ***UNICA*** chiamata che faccio all' unico un BackGroundWorker del programma è questa:
    codice:
       If TotalCrt.Count = 2 Then BW_Elabora.RunWorkerAsync()

    il codice del BGW (TotalCrt è una List(Of Integer):

    codice:
        Private Sub BW_Elabora_DoWork(sender.... eccetera eccetera)
    
            Dim Crt1 As String = TotalCrt(0).ToString(CultureInfo.InvariantCulture)
            Dim Crt2 As String = TotalCrt(1).ToString(CultureInfo.InvariantCulture)
            eccetera eccetera
    Quindi la chiamata al BGW avviene SOLO se TotalCrt contiene almeno 2 elementi.

    Tuttavia, sebbene molto raramente, ottengo in errore di "Indice oltre i limiti della matrice". SE vado a controllare... TotalCrt è nullo (TotalCrtCount = 0).

    Nel milionesimo di secondo che occorre al BGW per partire, nessun codice azzera la List, per cui non mi rimane che pensare che "parta" per altri motivi anche quando la List e nulla.

    Ma allora cosa può far partire un BGW se non la chiamata diretta??
    Ultima modifica di eziogsv; 19-08-2014 a 14:41

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Se c'è un errore logico di cui non ti sei accorto, nessuno te lo può fare notare se non posti tutto il codice che gira.

    E comunque, spero che da quella if il codice passi una sola volta perché verrebbe avviato continuamente se Count rimane 2 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Se c'è un errore logico di cui non ti sei accorto, nessuno te lo può fare notare se non posti tutto il codice che gira....
    Beh, dovrei postare 3.740 righe... non mi sembra il caso.

    Per errore logico cosa intendi? Una chiamata "farlocca" al BGW o un azzeramento della List tra la chiamata al BGW e la lettura della List nel BGW??...


    Quote Originariamente inviata da oregon Visualizza il messaggio
    .... comunque, spero che da quella if il codice passi una sola volta perché verrebbe avviato continuamente se Count rimane 2 ...
    Subito prima del codice postato sopra: If TotalCrt.Count >= 2 Then GoTo 45 (e salta il codice che poi lancia il BGW).

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da eziogsv Visualizza il messaggio
    Beh, dovrei postare 3.740 righe... non mi sembra il caso.

    Per errore logico cosa intendi? Una chiamata "farlocca" al BGW o un azzeramento della List tra la chiamata al BGW e la lettura della List nel BGW??...
    Beh ... un po' di tutto ... senza il codice non si può fare debugging e un problema del genere potrebbe essere difficile da scovare se non si esegue il codice.

    Subito prima del codice postato sopra: If TotalCrt.Count >= 2 Then GoTo 45 (e salta il codice che poi lancia il BGW).
    GoTo .... mamma mia ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    GoTo .... mamma mia ...
    Lol, vecchie reminiscenze QBasic Dos (tu forse non eri ancora nato...)... eppoi funziona, tutto sommato

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da eziogsv Visualizza il messaggio
    Lol, vecchie reminiscenze QBasic Dos (tu forse non eri ancora nato...)... eppoi funziona, tutto sommato
    Ti assicuro che c'ero e anche prima ... ho anche scritto un libro sul QB ... ma bisogna rassegnarsi e passare avanti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    se hai veramente scritto

    If TotalCrt.Count >= 2 Then GoTo 45

    e subito dopo

    IfTotalCrt.Count=2Then BW_Elabora.RunWorkerAsync()

    la seconda riga non verrà mai eseguita



    non dico di postare 18 milioni di righe, ma qualcosa intorno alla routine incriminata sì.

    e togli quel goto
    (45? ancora i numeri di riga? )

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da optime Visualizza il messaggio
    ...
    la seconda riga non verrà mai eseguita


    Condivido quello che ti ha scritto optime ... del resto, se vuoi un aiuto dal forum devi pur mostrare il codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Quote Originariamente inviata da optime Visualizza il messaggio
    se hai veramente scritto If TotalCrt.Count >= 2 Then GoTo 45 e subito dopo.........
    ...........
    e togli quel goto (45? ancora i numeri di riga? )
    Ragazzi, non sono un fenomeno ma non sono nemmeno un imbecille completo, abbiata pietà...

    OVVIO che il codice non è scritto subito prima (my fault, sorry), e che tra i due codici c' è un If ... Then TotalCrt.Add(......)

    Postare codice "intorno" alla riga incriminata non serve, perché in tutta la Sub non si azzera TotalCrt (e l' errore è prorio quello: TotalCrt che va a nothing tra la chiamata al BGW e quattro righe di elaborazione nel BWG)...

    Riguardo al GoTo... è perché mai dovrei toglierlo? Ci sono affezionato (l' affetto è tutto nella vita ) e qualche numero di riga non mi dà il minimo fastidio... anzi, mi ricorda i bei tempi della gioventu. Certo, mi costasse 100.000 cicli del processore... ma non mi pare sia così.

    Comunque ho risolto inserendo nel BGW cone primissime righe:

    codice:
    Dim FlagCrt AsNewList(OfInteger)(TotalCrt)
    If FlagCrt.Count <> 2 Then Return

    ed eseguendo i successivi calcoli su FlagCrt anziché su TotalCrt.
    Ultima modifica di eziogsv; 20-08-2014 a 19:18

  10. #10
    Quote Originariamente inviata da eziogsv Visualizza il messaggio
    Ragazzi, non sono un fenomeno ma non sono nemmeno un imbecille completo, abbiata pietà...

    OVVIO che il codice non è scritto subito dopo, e che tra i due codici c' è un If ... Then TotalCrt.Add(......)
    abbello sarà ovvio per te, che hai il codice davanti, noi che ne sappiamo?


    Quote Originariamente inviata da eziogsv Visualizza il messaggio
    Riguaro al GoTo... è perché mai dovrei toglierlo? Ci sono affezionato (l' affetto è tutto nella vita ) e qualche numero di riga non mi dà il minimo fastidio... anzi, mi ricorda i bei tempi della gioventu.
    ah bè, allora

    Quote Originariamente inviata da eziogsv Visualizza il messaggio
    Comunque ho risolto inserendo nel BGW cone primissime righe:

    codice:
    Dim FlagCrt AsNewList(OfInteger)(TotalCrt)
    If FlagCrt.Count <> 2 Then Return
    ed eseguendo i successivi calcoli su FlagCrt anziché su TotalCrt.
    quindi tuttapposhto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.