Strano problema nell'esecuzione di un EXE

martedì 30 settembre 2008 - 11.48

lukepet Profilo | Junior Member

Ho uno strano comportamento nell'applicativo che sto implementando.

Il programma legge dei dati da un server web e li salva in un database locale.

La cosa strana è che se lo avvio in modalità "Release" da Visual Studio 2005 funziona a meraviglia, mentre se lo avvio direttamente dal file exe generato in compilazione (dentro la cartella Release) si comporta in maniera diversa, bloccandosi al termine dell'esecuzione.

Avete qualche idea su quale possa essere la causa? Nell'applicativo utilizzo un backgroundworker, potrebbe dipendere da quello?

Analizzando il codice ho notato che l'esecuzione si blocca proprio al termine del processo background.

Vi prego aiutatemi!

Brainkiller Profilo | Guru

>Avete qualche idea su quale possa essere la causa? Nell'applicativo
>utilizzo un backgroundworker, potrebbe dipendere da quello?
>Analizzando il codice ho notato che l'esecuzione si blocca proprio
>al termine del processo background.

Eh può essere, forse una routine che non termina (e quindi ti blocca l'applicazione).
Non hai una sorta di logging all'interno della applicazione che ti logga eventuali Console.Writeline su file di testo così riesci a capire dove si blocca il codice.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

lukepet Profilo | Junior Member

Allora, all'interno della classe prinicipale attivo il background worker in questo modo:

Me.bkw_LeggiWeb.RunWorkerAsync(numP)
While bkw_LeggiWeb.IsBusy
Application.DoEvents()
End While


gli eventi gestiti dal background worker sono:

Private Sub bkw_LeggiWeb_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bkw_LeggiWeb.DoWork
Dim numP As Integer = CType(e.Argument, Integer)
Dim msg() As String = Funzione_Inizio(numP)
e.Result = msg
End Sub

Private Sub bkw_LeggiWeb_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bkw_LeggiWeb.RunWorkerCompleted
Dim msg() As String = DirectCast(e.Result, String())
If msg IsNot Nothing Then
Funzione_Fine(msg)
End If
End Sub


mettendo un msgbox ho notato che il programma si blocca proprio dentro al RunWorkerCompleted e non riesco a capire perchè. Ho provato anche a commetare tutte le istruzioni all'interno ma si blocca lo stesso.

La cosa che proprio non capisco è come mai lanciandolo in Release da Visual Studio funziona tutto perfettamente. Mentre con l'exe no.

Brainkiller Profilo | Guru

>mettendo un msgbox ho notato che il programma si blocca proprio
>dentro al RunWorkerCompleted e non riesco a capire perchè. Ho
>provato anche a commetare tutte le istruzioni all'interno ma
>si blocca lo stesso.

Ma scusa il codice che esegue il BackgroundWorker l'hai tolto ?

>La cosa che proprio non capisco è come mai lanciandolo in Release
>da Visual Studio funziona tutto perfettamente. Mentre con l'exe
>no.

Prova a fare un Clean della Solution e poi un Rebuild
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

lukepet Profilo | Junior Member

Mi sono reso conto che si tratta di un problema di grafica, mi spiego meglio.

Il processo in background va a popolare una griglia visualizzata a schermo, quando le righe eccedono in verticale automaticamente si deve creare la scrollbar...proprio in questa fase il programma avviato tramite exe si blocca.

Se lo termino e poi lo riapro non ho più alcun problema perchè la scroll è già visualizzata in quanto alcune righe sono già state caricate in precedenza.

C'è un modo per visualizzare la scrollbar anche in assenza di righe? Senza che venga attivata solo quando le righe sono maggiori dell'area verticale.

lukepet Profilo | Junior Member

Sono riuscito a risolvere.

Alla fine per aggirare il problema ho dovuto impostare ScrollBars.Horizontal prima dell'avvio del backgroundworker per poi rimmetterla a Both appena terminato.

Sinceramente non ho ancora capito il motivo di questo strano comportamento, ma in questo modo funziona.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5