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:
il thread è questocodice: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.
e la routine è la seguentecodice: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
Cosa sbaglio?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

Rispondi quotando