Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [2.0] Thread Multipli

  1. #1

    troppi thread

    Ciao,
    sono un nuovo utente del forum.
    programmo da qualche mese con ms visual studio 2008 in asp.net
    ho un problema che mi sta facendo impazzire:

    con javascript compongo una stringa che passo col metodo GET al mio file aspx.
    opero uno switch su uno dei valori del get per decidere quale funzione eseguire.

    quando ne esegue una in particolare mi partono 3 o 4 thread senza che io li abbia volutamente creati. Il codice del blocco CASE in questione viene eseguito parallelamente più volte dai vari thread creati, provocando nel mio caso un triplo o quadruplo inserimento nel db dei dati ricevuti.

    non riesco a trovare informazioni su internet, qualcuno ne sa qualcosa?

    ciao ciao

    faciolo

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Non puoi mandare una paginetta di prova, semplice e essenziale, su cui discutere? :master:
    Pietro

  3. #3
    ok cerco di fare un esempio in breve:

    JAVASCRIPT (JQuery):

    // img_save_new : on click save record into db
    $('#img_save_new').click( function() {
    if($("#text_vers_new").attr("value")=="" || $("#text_desc_new").attr("value")==""){
    alert('Attenzione! Il campo non può restare vuoto.')
    return;
    }
    combos = getCascadeValues(); // preleva i valori necessari dai campi
    vers = $("#text_vers_new").attr("value"); // valore campo versione
    desc = $("#text_desc_new").attr("value"); // valore campo descrizione
    newModello = $('#sel_modello_new').attr('value'); // valore nuovo modello

    // costruisce la stringa e effettua la richiesta
    window.location.href='versioni.aspx?action=2&vers= '+vers+'&desc='+desc+'&newModello='+newModello+'&m arca='+combos['marca']+'&paese='+combos['paese']+'&gamma='+combos['gamma']+'&famiglia='+combos['famiglia']+'&modello='+combos['modello'];
    });




    ASP.NET 2.0 con Visual Studio 2008
    Non è necessario leggere tutto il codice, quello che succede può essere riassunto così:
    all'esecuzione del javascript il msgbox della prima riga del case viene eseguito 2 o 3 volte...

    Case "2"
    MsgBox("2")
    Dim rsTmp As OleDbDataReader
    Dim rsTmp1 As OleDbDataReader
    Dim rsTmp2 As OleDbDataReader
    Dim rsTmp3 As OleDbDataReader
    Dim rsTmp4 As OleDbDataReader
    Dim rsTmp5 As OleDbDataReader
    Dim oTransaction As OleDbTransaction

    Try
    oTransaction = dp.BeginTransaction(System.Data.IsolationLevel.Rea dCommitted)
    oPar.Append("IdMarca", Request.QueryString("marca"))
    oPar.Append("IdTipoVeicolo", "2") ' ORA E' FISSO: PER
    rsTmp = QueryLib.WE_IdMarca_TipoVeicolo(dp, oPar, oTransaction).ExecuteReader ' prelevo IdMarca_TipoVeicolo (uguale sia per prima che dopo)

    If rsTmp.Read Then
    oPar.ClearList()
    oPar.Append("IdMarca_TipoVeicolo", rsTmp("IdMarca_TipoVeicolo"))
    oPar.Append("IdGamma", Request.QueryString("gamma"))
    rsTmp1 = QueryLib.Admin_WE_IdTipoVeicolo_Gamma(dp, oPar, oTransaction).ExecuteReader ' prelevo IdTipiVeicolo_Gamma per la vecchia gamma

    If rsTmp1.Read() Then
    oPar.ClearList()
    oPar.Append("IdTipoVeicolo_Gamma", rsTmp1("IdTipoVeicolo_Gamma"))
    oPar.Append("IdFamiglia", Request.QueryString("famiglia"))
    rsTmp2 = QueryLib.WE_IdGammaFamiglia(dp, oPar, oTransaction).ExecuteReader ' prelevo IdGammaFamiglia per la nuova gamma

    If rsTmp2.Read() Then

    oPar.ClearList()
    oPar.Append("IdGammaFamiglia", rsTmp2("IdGammaFamiglia"))
    oPar.Append("IdModello", Request.QueryString("modello"))
    rsTmp3 = QueryLib.WE_IdFamigliaModello(dp, oPar, oTransaction).ExecuteReader ' vecchio idfammod

    If rsTmp3.Read() Then

    oPar.ClearList()
    oPar.Append("Versione", Request.QueryString("vers"))
    oPar.Append("Descrizione", Request.QueryString("desc"))
    QueryLib.WE_inVersioni(dp, oPar, oTransaction).ExecuteNonQuery() ' inserisce nella tabella WE_Modelli
    rsTmp4 = QueryLib.Admin_WE_getMaxIdVersione(dp, oTransaction).ExecuteReader

    oPar.ClearList()
    oPar.Append("IdGammaFamiglia", rsTmp2("IdGammaFamiglia"))
    oPar.Append("IdModello", Request.QueryString("newModello"))
    rsTmp5 = QueryLib.WE_IdFamigliaModello(dp, oPar, oTransaction).ExecuteReader ' vecchio idfammod

    If rsTmp4.Read() Then
    oPar.ClearList()
    oPar.Append("IdVersione", rsTmp4("MaxIdVers"))
    oPar.Append("newFamigliaModello", rsTmp3("IdFamigliaModello"))
    oPar.Append("oldFamigliaModello", rsTmp5("IdFamigliaModello"))

    QueryLib.WE_inxModelliVersioni(dp, oPar, oTransaction).ExecuteNonQuery()

    oTransaction.Commit()
    Else : Throw New Exception
    MsgBox("1b")
    End If
    Else : Throw New Exception
    MsgBox("2b")
    End If
    Else : Throw New Exception
    MsgBox("3b")
    End If
    Else : Throw New Exception
    MsgBox("4b")
    End If
    Else : Throw New Exception
    MsgBox("5b")
    End If

    Catch ex As Exception
    oTransaction.Rollback()
    Response.Write("<script type=""text/javascript"">" & Chr(13))
    Response.Write("alert('src: case 2 - " & ex.Message.Replace("'", "\'") & "');" & Chr(13))
    Response.Write("</script>")
    End Try

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    purtroppo non mi serve per capire il problema. Ho fatto un esempio più semplice. Prova a mettere le istruzioni critiche:
    codice:
    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim action As String = Me.Request.QueryString("action")
            Select Case action
                Case "2"
                    Me.Response.Write("2" & "
    ")
            End Select
        End Sub
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    function Button1_onclick() 
    {
        window.location.href = 'b.aspx?action=2';
    
    }
    
    // ]]>
    </script>
        
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
        </div>
        </form>
    </body>
    </html>
    Pietro

  5. #5
    eh lo so, il problema è che non so che diavolo succede... per quanto mi riguarda non ci sono istruzioni critiche in particolare.

    l'esecuzione ripetuta di alcune istruzioni avviene apparentemente a caso, o meglio, 1 per ogni thread creato, ma io non ho né impostato la creazione di + thread, né tantomeno ho impostato il multithreading automatico (forse è di default?).

    è proprio per questo che ho scritto qui: perché questo comportamento mi lascia basito e non so come, dove e cosa cercare...

    cmq il tuo esempio semplificato è giusto

  6. #6
    ragazzi ho tristemente capito l'errore che commettevo: la funzione javascript che ho postato in cui associavo l'evento onclick a qualcosa veniva ripetuta tante volte quante erano le righe presenti nella mia tabella. indi per cui all'evento click erano associate più di una richiesta, questo provocava l'avvio di + thread e il casino di cui vi ho parlato.

    grazie cmq dell'aiuto

    ciao ciao

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da facioloX
    ragazzi ho tristemente capito l'errore che commettevo: la funzione javascript che ho postato in cui associavo l'evento onclick a qualcosa veniva ripetuta tante volte quante erano le righe presenti nella mia tabella. indi per cui all'evento click erano associate più di una richiesta, questo provocava l'avvio di + thread e il casino di cui vi ho parlato.

    grazie cmq dell'aiuto

    ciao ciao
    lo sapevo che c'era il trucco
    Pietro

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    edito il titolo perche' e' fuorviante

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