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