Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    26

    [VB.Net] Lanciare procedura asincrona

    Sto creando una pagina web in vb.net

    Quando viene caricata questa pagina deve essere lanciata una procedura che ha la scopo di copiare ed eliminare dei file all'interno del web server. Non voglio però che l'utente che ha caricato la pagina debba aspettare che la procedura (copia ed eliminazione) dei file termini prima di avere il responso della pagina.

    Come posso fare?

    Se io ad esempio nella sub main della pagina lancio la procedura:
    call subBatchFile()

    la pagina rimane in attesa finche la sub non termina. Io invece voglio che il programma vada oltre, in modo che l'utente non abbia la pagina in attesa di risposta finche non termina la procedura. Sottolineo che non vorrei creare un eseguibile a parte che sostituisca tale procedura.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    26
    Se uso:

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim t as New Thread(AddressOf ProceduraBatch)
    t.Start()
    End Sub

    Private Sub ProceduraBatch()
    .....
    end sub


    Mi da questo errore:
    Eccezione non gestita di tipo System.NullReferenceException in modulo sconosciuto

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Ho spostato la domanda nel forum appropriato: ASP.NET.
    Poni qui le tue domande in futuro su questa architettura.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    26
    Usando i thread ho scoperto che questo errore mi compare con la funzione HttpContext.Current.Server.MapPath

    HttpContext non viene valorizzato correttamente in un thread.
    come posso fare??

    Da problemi pure Request.QueryString

    Non ci sono altre soluzione al posto dei thread??

  5. #5

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    prova a fare cosi,


    1) crei una classe"Worker", e sposti la funzione in questa classe. Ad esempio nel costruttore di questa classe, ci passi l'HttpContext e te lo salvi

    2) =modifica la funzione affinche usi il context passato all' oggetto

    3) Worker workerObject = new Worker();
    Thread workerThread = new Thread(workerObject.DoWork);

    // Start the worker thread.
    workerThread.Start();
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    26
    grazie funzionano entrambe le vostre proposte!
    ma che ci sia qualche differenza tra MioDelegate e thread? chissa quali sono i migliori

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    penso che siano uguali, penso che beginInvoke lanci "di nascosto" un thread!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  9. #9
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    a grandi linee si,ma i delegate hanno anche la possibilità di far richiamare un callback a fine procedura che i thread se ricordo bene non hanno.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.