Process.EnableRaisingEvents Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt opgehaald of ingesteld of de Exited gebeurtenis moet worden gegenereerd wanneer het proces wordt beëindigd.
public:
property bool EnableRaisingEvents { bool get(); void set(bool value); };
[System.ComponentModel.Browsable(false)]
public bool EnableRaisingEvents { get; set; }
[<System.ComponentModel.Browsable(false)>]
member this.EnableRaisingEvents : bool with get, set
Public Property EnableRaisingEvents As Boolean
Waarde van eigenschap
trueals de Exited gebeurtenis moet worden gegenereerd wanneer het bijbehorende proces wordt beëindigd (via een exit of een aanroep naarKill()); anders. false De standaardwaarde is false. Houd er rekening mee dat zelfs als de waarde EnableRaisingEvents is, de Exited gebeurtenis wordt gegenereerd door de HasExited eigenschapstoegangsor, als wordt bepaald dat het falseproces is afgesloten.
- Kenmerken
Voorbeelden
In het volgende codevoorbeeld wordt een proces gemaakt waarmee een bestand wordt afgedrukt. Hiermee stelt u de EnableRaisingEvents eigenschap in om ervoor te zorgen dat het proces de Exited gebeurtenis genereert wanneer deze wordt afgesloten. De Exited gebeurtenis-handler geeft procesgegevens weer.
using System;
using System.Diagnostics;
using System.Threading.Tasks;
class PrintProcessClass
{
private Process myProcess;
private TaskCompletionSource<bool> eventHandled;
// Print a file with any known extension.
public async Task PrintDoc(string fileName)
{
eventHandled = new TaskCompletionSource<bool>();
using (myProcess = new Process())
{
try
{
// Start a process to print a file and raise an event when done.
myProcess.StartInfo.FileName = fileName;
myProcess.StartInfo.Verb = "Print";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new EventHandler(myProcess_Exited);
myProcess.Start();
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred trying to print \"{fileName}\":\n{ex.Message}");
return;
}
// Wait for Exited event, but not more than 30 seconds.
await Task.WhenAny(eventHandled.Task,Task.Delay(30000));
}
}
// Handle Exited event and display process information.
private void myProcess_Exited(object sender, System.EventArgs e)
{
Console.WriteLine(
$"Exit time : {myProcess.ExitTime}\n" +
$"Exit code : {myProcess.ExitCode}\n" +
$"Elapsed time : {Math.Round((myProcess.ExitTime - myProcess.StartTime).TotalMilliseconds)}");
eventHandled.TrySetResult(true);
}
public static async Task Main(string[] args)
{
// Verify that an argument has been entered.
if (args.Length <= 0)
{
Console.WriteLine("Enter a file name.");
return;
}
// Create the process and print the document.
PrintProcessClass myPrintProcess = new PrintProcessClass();
await myPrintProcess.PrintDoc(args[0]);
}
}
open System
open System.Diagnostics
open System.Threading.Tasks
let mutable myProcess = new Process()
let mutable eventHandled = TaskCompletionSource<bool>()
// Handle Exited event and display process information.
let myProcess_Exited (sender: obj) (e: EventArgs) =
printfn $"Exit time : {myProcess.ExitTime}\n"
printfn $"Exit code : {myProcess.ExitCode}\n"
printfn $"Elapsed time : {round ((myProcess.ExitTime - myProcess.StartTime).TotalMilliseconds)}"
eventHandled.TrySetResult true |> ignore
// Print a file with any known extension.
let printDoc fileName =
task {
eventHandled <- TaskCompletionSource<bool>()
use myProcess = new Process()
try
// Start a process to print a file and raise an event when done.
myProcess.StartInfo.FileName <- fileName
myProcess.StartInfo.Verb <- "Print"
myProcess.StartInfo.CreateNoWindow <- true
myProcess.EnableRaisingEvents <- true
myProcess.Exited.AddHandler(EventHandler myProcess_Exited)
myProcess.Start() |> ignore
with ex ->
printfn $"An error occurred trying to print \"{fileName}\":\n{ex.Message}"
// Wait for Exited event, but not more than 30 seconds.
let! _ = Task.WhenAny(eventHandled.Task, Task.Delay(30000))
()
}
[<EntryPoint>]
let main args =
// Verify that an argument has been entered.
if args.Length <= 0 then
printfn "Enter a file name."
else
// Create the process and print the document.
printDoc(args[0]).Wait() |> ignore
0
Imports System.Diagnostics
Class PrintProcessClass
Private WithEvents myProcess As Process
Private eventHandled As TaskCompletionSource(Of Boolean)
' Print a file with any known extension.
Async Function PrintDoc(ByVal fileName As String) As Task
eventHandled = New TaskCompletionSource(Of Boolean)()
myProcess = New Process
Using myProcess
Try
' Start a process to print a file and raise an event when done.
myProcess.StartInfo.FileName = fileName
myProcess.StartInfo.Verb = "Print"
myProcess.StartInfo.CreateNoWindow = True
myProcess.EnableRaisingEvents = True
AddHandler myProcess.Exited, New EventHandler(AddressOf myProcess_Exited)
myProcess.Start()
Catch ex As Exception
Console.WriteLine("An error occurred trying to print ""{0}"":" &
vbCrLf & ex.Message, fileName)
Return
End Try
' Wait for Exited event, but not more than 30 seconds.
Await Task.WhenAny(eventHandled.Task, Task.Delay(30000))
End Using
End Function
' Handle Exited event and display process information.
Private Sub myProcess_Exited(ByVal sender As Object,
ByVal e As System.EventArgs)
Console.WriteLine("Exit time: {0}" & vbCrLf &
"Exit code: {1}" & vbCrLf & "Elapsed time: {2}",
myProcess.ExitTime, myProcess.ExitCode,
Math.Round((myProcess.ExitTime - myProcess.StartTime).TotalMilliseconds))
eventHandled.TrySetResult(True)
End Sub
Shared Sub Main(ByVal args As String())
' Verify that an argument has been entered.
If args.Length <= 0 Then
Console.WriteLine("Enter a file name.")
Return
End If
' Create the process and print the document.
Dim myPrintProcess As New PrintProcessClass
myPrintProcess.PrintDoc(args(0)).Wait()
End Sub
End Class
Opmerkingen
De EnableRaisingEvents eigenschap geeft aan of het onderdeel moet worden gewaarschuwd wanneer het besturingssysteem een proces heeft afgesloten. De EnableRaisingEvents eigenschap wordt gebruikt in asynchrone verwerking om uw toepassing op de hoogte te stellen dat een proces is afgesloten. Als u wilt afdwingen dat uw toepassing synchroon wacht op een afsluitgebeurtenis (waardoor de verwerking van de toepassing wordt onderbroken totdat de afsluitgebeurtenis is opgetreden), gebruikt u de WaitForExit methode.
Note
Als u Visual Studio gebruikt en dubbelklikt op een Process-onderdeel in uw project, wordt automatisch een Exitedgebeurtenisdelegen en gebeurtenis-handler gegenereerd. Met aanvullende code wordt de EnableRaisingEvents eigenschap ingesteld op false. U moet deze eigenschap wijzigen zodat true de gebeurtenis-handler wordt uitgevoerd wanneer het bijbehorende proces wordt afgesloten.
Als de waarde van EnableRaisingEvents het onderdeel is true, of wanneer EnableRaisingEventsfalse en een HasExited controle wordt aangeroepen door het onderdeel, heeft het onderdeel toegang tot de beheergegevens voor het bijbehorende proces, dat door het besturingssysteem wordt opgeslagen. Deze informatie omvat de ExitTime en de ExitCode.
Nadat het bijbehorende proces is afgesloten, verwijst het Handle onderdeel niet meer naar een bestaande procesresource. In plaats daarvan kan het alleen worden gebruikt voor toegang tot de informatie van het besturingssysteem over de procesresource. Het besturingssysteem is zich ervan bewust dat er ingangen zijn voor afgesloten processen die niet zijn vrijgegeven door Process onderdelen, zodat de en Handle informatie ExitTime in het geheugen worden opgeslagen.
Er zijn kosten verbonden aan het controleren van een proces om af te sluiten. Als EnableRaisingEvents dat het geval is true, wordt de Exited gebeurtenis gegenereerd wanneer het bijbehorende proces wordt beëindigd. Uw procedures voor de uitvoering van de Exited gebeurtenis op dat moment.
Soms start uw toepassing een proces, maar vereist geen melding van de sluiting ervan. Uw toepassing kan bijvoorbeeld Kladblok starten om de gebruiker toe te staan tekst te bewerken, maar de toepassing Kladblok niet verder te gebruiken. U kunt ervoor kiezen om meldingen te voorkomen wanneer het proces wordt afgesloten, omdat dit niet relevant is voor de continue werking van uw toepassing. Instelling EnableRaisingEvents om systeembronnen op te false slaan.