WebBrowser al secondo passaggio da errore

di il
0 risposte

WebBrowser al secondo passaggio da errore

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
Devi accedere o registrarti per scrivere nel forum
0 risposte