Salve,
sto usando webbrowser per elaborare dei documenti word, chiamo il form Leggi da un altro form e
al primo passaggio tutto bene, chiudo il form
e nel form chiamante cambio il nome documento e richiamo il form leggi
ed alla seconda lettura mi da questo errore
System.NullReferenceException: 'Riferimento a un oggetto non impostato su un'istanza di oggetto.'
vi posto il codice
Private Sub button1_click(sender As Object, e As EventArgs) Handles Button1.Click
Dim filePath As String = "C:\Users\Max\Desktop\CRM\CRM\Documenti\" + TextBox1.Text.Trim
WebBrowser1.Refresh()
Try
WebBrowser1.Navigate(filePath)
Catch ex As Exception
MessageBox.Show("Errore durante il caricamento del documento: " & ex.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
' Importante: rilasciare le risorse del browser quando l'applicazione si chiude
If WebBrowser1 IsNot Nothing Then
' 1. Naviga a una pagina vuota per interrompere il collegamento con il documento corrente
WebBrowser1.Navigate("about:blank")
' 2. Interrompi eventuali script o processi attivi
Application.DoEvents()
' 3. Dispose del controllo
WebBrowser1.Dispose()
WebBrowser1 = Nothing
' 4. Richiama esplicitamente il Garbage Collector
' per pulire immediatamente eventuali riferimenti COM pendenti.
' Questo non è sempre consigliato nell'uso generale,
' ma è utile per risolvere problemi ostinati di OLE/COM.
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
End If
KillWordProcess()
End Sub
Private Sub KillWordProcess()
' Iterare attraverso tutti i processi di Word in esecuzione
For Each proc As Process In Process.GetProcessesByName("WINWORD")
' In un'applicazione reale, potresti voler aggiungere logica per assicurarti
' di terminare solo il processo relativo a QUESTA applicazione,
' ma è estremamente difficile quando si usa il WebBrowser.
Try
' Uccide il processo
proc.Kill()
proc.WaitForExit(1000) ' Aspetta fino a 1 secondo che termini
Catch ex As Exception
' Gestire eventuali errori (ad esempio, accesso negato o processo già terminato)
Debug.WriteLine("Impossibile terminare il processo WINWORD: " & ex.Message)
End Try
Next
End Sub