Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [Visual Basic 2010] Termina Processo da BackGroundWorker

    Ciao,
    è possibile con :
    codice:
        Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            Dim Processo As Object
            Dim A As Integer
            
            Do While Not A > 0
    
                For Each Processo In GetObject("winmgmts:").InstancesOf("win32_process")
                    If Processo.Name = "AcroRd32.exe" Then
                        Processo.Terminate()
                    End If
    
    
                Next
                A = 1
               
            Loop
        End Sub
    far controllare che non ci sia aperto il processo AcroRD32.exe?

    Se eseguo questo codice mi restituisce errore sulla riga
    codice:
    Processo.Terminate()
    Cosa sbaglio? E' fattibile?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di IAL32
    Registrato dal
    Aug 2011
    Messaggi
    88
    Terminate non è un metodo di BackGroundWorker(Qua c'è la classe BackGroundWorker).
    Per terminare un BackGroundWorker, devi innanzitutto verificare se la proprietà WorkerSupportsCancellation è impostata su True, poi devi usare, invece di .Terminate, .CancelAsync

    Per il primo problema, potresti provare a riadattare i codici presenti nelle pagine che ti metto ora:

    Check to see if Notepad is open

    How do i kill a process using VB.NET or C#?

    How to Check for an Application Process in Visual Basic .NET

  3. #3
    Grazie per la risposta
    ma non devo terminare il mio processo ma AcroRd32.exe.

    Spiego un po' meglio la problematica:
    stampo un pdf con PDFCreator e durante la fase di stampa viene aperto AcroRd32, finchè non chiudo AcroRd32.exe la mia applicazione non va avanti.

    Vorrei fare un programma che gira in background che controlla ad intervalli + o - ampi che non ci sia quel processo attivo

    Idee? Fattibile?
    Grazie

  4. #4
    Utente di HTML.it L'avatar di IAL32
    Registrato dal
    Aug 2011
    Messaggi
    88
    Per gli intervalli non è così difficile, basta impostare un timer, impostandone il tempo che varia tra un tick e l'altro; ad ogni tick, poi usare il background worker.
    I link che ti ho dato, non dicono solo come terminare un'operazione(sopratutto il primo), ma anche come fare una lista della applicazioni che sono attive.

    Una bozza?
    codice:
    Dim WithEvents myTimer As New Timer With {.Interval = "INTERVALLO_MILLISECONDI", .Enabled = True}
    Dim Withevents myBackGroundWorker As New BackGroundWorker With {.SupportsCancellation = True}
    Private Sub myTimer_Tick() Handles myTimer.Tick
    	'Ad ogni tick del timer, controlla avvia il BackgroundWorker
    	myBackGroundWorker.RunWorkerAsync()
    End Sub
    
    Private Sub myBackGroundWorker_DoWork() Handles myBackGroundWorker.DoWork
    	Try
    		'Crea un array di processi
    		Dim npProc() As Process
    
    		'il metodo GetProcesses riempie l'array con tutti i processi in esecuzione
    		npProc = Process.GetProcesses
    		'Il ciclo iterativo For ... Next controlla ogni proc As Process
    		'nell'array nProc
    		For Each proc As Process In npProc
    			'Controlla se l'applicazione corrente è quella designata
    			If proc.ProcessName.Equals("notepad") Then
    				'Fai qualcosa
    				Exit For
    				'Ho scritto Exit For per chiudere il ciclo
    				'così il programma evita di cercare se è presente
    				'il processo, già precedentemente trovato.
    			End If
    		Next proc
    	
    	Catch ex As Exception
    		'Se viene generata un'eccezione...
    	End Try
    End Sub
    L'ho fatta senza IDE, quindi potrebbe segnalarti qualcosa...

    Spero di essere stato esauriente e chiaro

  5. #5
    Non mi è chiaro "ad ogni tick, poi usare il background worker"

    Scusa ma non sn molto pratico in tal senso...

  6. #6
    Scusa non avevo visto bene... domani mattina controllo e ti faccio sapere, grazie!

  7. #7
    Utente di HTML.it L'avatar di IAL32
    Registrato dal
    Aug 2011
    Messaggi
    88
    Originariamente inviato da Skyscraper84
    Non mi è chiaro "ad ogni tick, poi usare il background worker"

    Scusa ma non sn molto pratico in tal senso...
    Il Tick è un evento di System.Windows.Forms.Timer, che viene generato ad ogni raggiungimento dell'intervallo(Interval Property)impostato.

  8. #8
    Non riesco proprio.. sto impazzendo con sta cosa...

  9. #9
    Utente di HTML.it L'avatar di IAL32
    Registrato dal
    Aug 2011
    Messaggi
    88
    Non riesci a capire quello che ti sto scrivendo, o ci sono degli errori che ti restituisce il programma?

  10. #10
    Non mi esegue il codice...

    e mi va in errore.. mi dice che il BackGroundWorker è già impegnato

    codice:
        Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    
            Dim Processo() As Process
    
            Dim Avviato As Boolean = False
    
            Dim Contatore As Integer
    
            BackgroundWorker1.WorkerSupportsCancellation = True
            Processo = Process.GetProcesses
            For Each Proc As Process In Processo
    
    
                If Proc.ProcessName = "AcroRd32.exe" Then
                    Proc.Kill()
                    BackgroundWorker1.CancelAsync()
                    'Me.Label1.Text = "Adobe Reader Kill"
    
                End If
    
                Contatore = Contatore + 1
    
            Next
    
            'Me.Label5.Text = Contatore
    
            BackgroundWorker1.CancelAsync()
    
        End Sub 
    
        Private Sub Timer3_Tick(sender As System.Object, e As System.EventArgs) Handles Timer3.Tick
            'Ad ogni tick del timer, controlla avvia il BackgroundWorker
    
            BackgroundWorker1.RunWorkerAsync()
    
        End Sub

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.