HOW TO: Rilevare se un'applicazione Ŕ bloccata con Visual Basic .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 304990 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato precedentemente pubblicato con il codice di riferimento I304990
Nel presente articolo viene illustrata una versione beta di un prodotto Microsoft. Le informazioni contenute in questo articolo vengono fornite "nello stato in cui si trovano" e sono soggette a modifiche senza preavviso.

Per questo prodotto beta Microsoft non fornisce alcun tipo di supporto formale. Per informazioni su come ottenere supporto per una versione beta, consultare la documentazione fornita con i file del prodotto beta oppure visitare il sito Web da cui la versione del prodotto Ŕ stata scaricata.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In alcune situazioni pu˛ essere utile verificare se un'applicazione Ŕ bloccata. Se si automatizza ad esempio Microsoft Internet Explorer, Ŕ possibile verificare se Internet Explorer non risponde pi¨.

In questo articolo viene illustrato come rilevare se un'istanza automatica di Internet Explorer non risponde pi¨ (Ŕ bloccata) e come chiudere Internet Explorer. Sebbene il codice si riferisca a Internet Explorer e Visual Basic .NET, Ŕ possibile utilizzare un approccio analogo per altre applicazioni.

Nelle prime tre sezioni di questo articolo sono illustrati tre importanti concetti di codifica necessari per svolgere questa attivitÓ. Nella quarta sezione viene dimostrato come compilare l'applicazione di esempio.

Avviare l'applicazione

Nell'esempio riportato in questo articolo viene utilizzata l'applicazione Internet Explorer. Il codice riportato di seguito avvia Internet Explorer e utilizza il metodo GetProcessByName per ottenere un handle al processo.
    Browser = New InternetExplorer()
    Browser.Visible = True
    Browser.GoHome()
    procs = Process.GetProcessesByName("IEXPLORE")

Stabilire se l'applicazione risponde

Il codice riportato di seguito verifica il primo elemento della matrice procs, restituito dal metodo GetProcessByName, per stabilire se il processo risponde. In questo articolo si presume che sia in esecuzione una sola istanza di Internet Explorer. ╚ necessario utilizzare il blocco try-catch per gestire l'eccezione che viene generata se il processo non esiste.
    Try
        If procs(0).Responding = True Then
            MessageBox.Show("IEXPLORE is responding")
        Else
            MessageBox.Show("IEXPLORE is not responding")
        End If
    Catch
         MessageBox.Show("IEXPLORE is not running")
    End Try

Chiudere l'applicazione

Il codice riportato di seguito dimostra come chiudere l'applicazione. Se l'applicazione risponde ancora, Ŕ possibile utilizzare il metodo CloseMainWindows della classe Process per chiuderlo. Se l'applicazione non risponde, Ŕ necessario chiamare il metodo Kill.
    Try
        If procs(0).Responding Then
            procs(0).CloseMainWindow()
        Else
            'Force closure.
            procs(0).Kill()
        End If

    Catch notRunning As Exception When Err.Number = 91
        MessageBox.Show("Could Not Find the IEXPLORE Process")
        
    End Try

Compilare il progetto di esempio

Informazioni sul progetto di esempio

Il progetto di esempio di questo articolo Ŕ costituito da un modulo che contiene i tre pulsanti seguenti:
  • Start Internet Explorer, che utilizza l'automazione per avviare un'istanza di Internet Explorer.
  • Check Internet Explorer, che controlla se il browser risponde.
  • Close Internet Explorer, che chiude il browser.
Se si desidera testare il codice e si Ŕ conoscenza di una pagina Web che provoca il blocco del browser, Ŕ possibile visualizzare tale pagina dopo aver aperto il browser. Provare quindi a fare clic sui pulsanti Check Internet Explorer e Close Internet Explorer. Attendere qualche minuto dopo avere fatto clic sui pulsanti. La risposta non Ŕ immediata quando il browser non risponde.

Procedura per compilare il progetto di esempio

  1. Avviare una nuova applicazione Windows Visual Basic in Visual Basic .NET.
  2. Nella finestra Solution Explorer fare clic con il pulsante destro del mouse su References, quindi scegliere Add Reference.
  3. Nella scheda COM della finestra di dialogo Add Reference fare clic su Microsoft Internet Controls, quindi scegliere Select.
  4. Scegliere OK per chiudere la finestra di dialogo Add Reference.
  5. Nella finestra Solution Explorer fare clic con il pulsante destro del mouse su Forml.vb, quindi scegliere View Code.
  6. Eliminare tutto il codice dalla finestra del codice Form1.vb.
  7. Incollare nella finestra del codice Form1.vb il codice riportato di seguito:
    Option Explicit On 
    Option Strict On
    Imports SHDocVw
    
    Public Class Form1
        Inherits System.Windows.Forms.Form
    
    #Region" Windows Form Designer generated code "
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Windows Form Designer.
            InitializeComponent()
    
            'Add any initialization after the InitializeComponent() call.
    
        End Sub
    
        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
        Friend WithEvents btnStart As System.Windows.Forms.Button
        Friend WithEvents btnCheck As System.Windows.Forms.Button
        Friend WithEvents btnClose As System.Windows.Forms.Button
    
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.Container
    
        ' NOTE: The following procedure is required by the Windows Form Designer.
        'You can use the Windows Form Designer to modify it; however, do not
        'use the code editor to modify it.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.btnClose = New System.Windows.Forms.Button()
            Me.btnStart = New System.Windows.Forms.Button()
            Me.btnCheck = New System.Windows.Forms.Button()
            Me.SuspendLayout()
            '
            'btnClose
            '
            Me.btnClose.Location = New System.Drawing.Point(66, 176)
            Me.btnClose.Name = "btnClose"
            Me.btnClose.Size = New System.Drawing.Size(160, 23)
            Me.btnClose.TabIndex = 2
            Me.btnClose.Text = "Close Internet Explorer"
            '
            'btnStart
            '
            Me.btnStart.Location = New System.Drawing.Point(66, 72)
            Me.btnStart.Name = "btnStart"
            Me.btnStart.Size = New System.Drawing.Size(160, 23)
            Me.btnStart.TabIndex = 0
            Me.btnStart.Text = "Start Internet Explorer"
            '
            'btnCheck
            '
            Me.btnCheck.Location = New System.Drawing.Point(66, 124)
            Me.btnCheck.Name = "btnCheck"
            Me.btnCheck.Size = New System.Drawing.Size(160, 23)
            Me.btnCheck.TabIndex = 1
            Me.btnCheck.Text = "Check Internet Explorer"
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(292, 266)
            Me.Controls.AddRange(New System.Windows.Forms.Control() _
                {Me.btnClose, Me.btnCheck, Me.btnStart})
            Me.Name = "Form1"
            Me.Text = "Form1"
            Me.ResumeLayout(False)
    
        End Sub
    
    #End Region
    
        Private WithEvents Browser As InternetExplorer
        Private procs() As Process
    
        Private Sub btnStart_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles btnStart.Click
            Me.Cursor.Current = Cursors.WaitCursor
            Browser = New InternetExplorer()
            Browser.Visible = True
            Browser.GoHome()
            procs = Process.GetProcessesByName("IEXPLORE")
        End Sub
    
        Private Sub btnCheck_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles btnCheck.Click
            'This code assumes that only one instance of Internet Explorer is running.
            Me.Cursor.Current = Cursors.WaitCursor
    
            Try
                If procs(0).Responding = True Then
                    MessageBox.Show("IEXPLORE is responding")
                Else
                    MessageBox.Show("IEXPLORE is not responding")
                End If
            Catch
                MessageBox.Show("IEXPLORE is not running")
            End Try
        End Sub
    
        Private Sub btnClose_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles btnClose.Click
            Me.Cursor.Current = Cursors.WaitCursor
            Try
                If procs(0).Responding Then
                    procs(0).CloseMainWindow()
                Else
                    procs(0).Kill()
                    cleanUp()
                End If
    
            Catch notRunning As Exception When Err.Number = 91
                MessageBox.Show("Could Not Find the IEXPLORE Process")
            Catch lockedUp As Exception When Err.Number = -2147023170
                'Do nothing.
            End Try
        End Sub
    
    
        Private Sub Browser_OnQuit() Handles Browser.OnQuit
            'Clean up if the browser is closed manually.
            cleanUp()
        End Sub
    
        Private Sub cleanUp()
            ReDim procs(0)
            Browser = Nothing
        End Sub
    
    End Class
    NOTA: il codice precedente disegna, posiziona e attribuisce automaticamente un nome ai tre pulsanti del modulo ed evita pertanto di doverli aggiungere manualmente.
  8. Dopo aver incollato il codice nella finestra del codice Form1.vb, Ŕ possibile comprimere la regione denominata Windows Form Designer generated code.
  9. Premere F5 per compilare ed eseguire il progetto.
  10. Mentre Internet Explorer Ŕ in esecuzione, fare clic sui pulsanti del modulo per testare il codice.
RIFERIMENTI : Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito (gli articoli con prefisso "Q" contengono informazioni in inglese):
304991HOW TO: Rilevare se un'applicazione Ŕ bloccata con C#

ProprietÓ

Identificativo articolo: 304990 - Ultima modifica: domenica 11 novembre 2001 - Revisione: 1.0
Le informazioni in questo articolo si applicano a
  • Microsoft Visual Basic .NET 2002 Standard Edition
Chiavi:á
kbhowto kbhowtomaster kbie KB304990
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com