ciao, la mia applicazione richiama un thread per l'avvio di una routine che effettua il download di file via ftp. in fase di esecuzione, ma non sempre, del thread appare un messaggio di errore, che è il seguente:
codice:
LoaderLock è stata rilevata
Message: Tentativo di esecuzione gestita all'interno del blocco OS Loader. Non provare a eseguire codice gestito all'interno di una DllMain o di una funzione di inizializzazione delle immagini. Questa operazione può causare il blocco dell'applicazione.
il thread è questo
codice:
Public Sub ThreadControlloIstruzioniRemote()
Try
'controlla che ci sia una rete disponibile per la connessione
If My.Computer.Network.IsAvailable = True Then
'controlliamo se il thread è in esecuzione "per non lanciare una seconda copia"
If Not (ThControlloIstruzioniRemote Is Nothing) AndAlso ThControlloIstruzioniRemote.IsAlive Then
'avviso utente
MsgBox("Si stà tentando di effettuare un controllo di istruzioni remote via Ftp ma il servizio è attualmente impegnato." & vbCrLf & "Tenta l'operazione in un secondo momento.", MsgBoxStyle.Information)
Else
'creo una nuova "instance" di thread
ThControlloIstruzioniRemote = New Thread(AddressOf SubIstruzioniRemote)
ThControlloIstruzioniRemote.SetApartmentState(ApartmentState.STA)
'imposta un nome
ThControlloIstruzioniRemote.Name = "ThControlloIstruzioniRemote"
'lanciamo il thread
ThControlloIstruzioniRemote.Start()
End If
Else
'nessuna rete disponibile per la connessione
'avviso utente
MsgBox("Attenzione, non è possibile completare l'operazione per mancanza di rete." & vbCrLf & "Tenta l'operazione dopo aver collegato il computer ad una rete internet.", MsgBoxStyle.Information)
End If
Catch ex As Exception
MsgBox(Err.Description.ToString) 'Gestione Errore
End Try
End Sub
e la routine è la seguente
codice:
Sub SubIstruzioniRemote()
'percorso del file per l'upload
Dim PercorsoLocale As String = My.Computer.FileSystem.SpecialDirectories.Desktop.ToString & "\" & CodiceApplicazione.ToString & ".txt"
Dim PercorsoServer As String = "ftp://" & My.Settings.Funzionalità_FTP_Host.ToString & "/" & CodiceApplicazione.ToString & CodiceClient.ToString & CodiceUtente.ToString & ".txt"
Try
'imposta il percorso del file da scaricare
If ControlloDirectoryApplicazione() = True Then
'dichiara gli oggetti per la connessione al server
'variabile per effettuare la richiesta
Dim Ftp_richiesta As WebRequest = DirectCast(WebRequest.Create(PercorsoServer.ToString), WebRequest)
'impostazione delle variabili
Ftp_richiesta.Credentials = New System.Net.NetworkCredential(My.Settings.Credenziali_FTP_Login.ToString, My.Settings.Credenziali_FTP_Password.ToString)
'impostazione del metodo
Ftp_richiesta.Method = WebRequestMethods.Ftp.DownloadFile
'variabile per il controllo della risposta
Dim Ftp_risposta As WebResponse = CType(Ftp_richiesta.GetResponse, FtpWebResponse)
'variabili per il controllo del flusso dati
Dim Stream As Stream = Nothing
Dim Reader As StreamReader = Nothing
Dim Writer As StreamWriter = Nothing
'avviamento della procedura di lettura del flusso e scrittura
Stream = Ftp_risposta.GetResponseStream
Reader = New StreamReader(Stream, System.Text.Encoding.UTF8)
Writer = New StreamWriter(PercorsoLocale.ToString, False)
Writer.Write(Reader.ReadToEnd)
'rilascio delle risorse
Stream.Close()
Reader.Close()
Writer.Close()
Else
'il ControlloDirectoryApplicazione ha avuto esito negativo
'avviso utente
MsgBox("Attenzione, si sta tentando di scaricare un file contenente le istruzioni remote, ma non è possibile registrarlo nel computer locale." & vbCrLf & "La procedura verrà terminata.", MsgBoxStyle.Information)
End If
Catch ex As Exception
MsgBox(Err.Description.ToString) 'Gestione Errore
End Try
Cosa sbaglio?