Export (0) Print
Expand All

Process.SynchronizingObject Property

Gets or sets the object used to marshal the event handler calls that are issued as a result of a process exit event.

Namespace:  System.Diagnostics
Assembly:  System (in System.dll)

'Declaration
<BrowsableAttribute(False)> _
<MonitoringDescriptionAttribute("ProcessSynchronizingObject")> _
Public Property SynchronizingObject As ISynchronizeInvoke

Property Value

Type: System.ComponentModel.ISynchronizeInvoke
The ISynchronizeInvoke used to marshal event handler calls that are issued as a result of an Exited event on the process.

When SynchronizingObject is Nothing, methods that handle the Exited event are called on a thread from the system thread pool. For more information about system thread pools, see ThreadPool.

When the Exited event is handled by a visual Windows Forms component, such as a Button, accessing the component through the system thread pool might not work, or might result in an exception. Avoid this by setting SynchronizingObject to a Windows Forms component, which causes the methods handling the Exited event to be called on the same thread on which the component was created.

If the Process is used inside Visual Studio 2005 in a Windows Forms designer, SynchronizingObject is automatically set to the control that contains the Process. For example, if you place a Process on a designer for Form1 (which inherits from Form) the SynchronizingObject property of Process is set to the instance of Form1:

Me.process1.StartInfo.Domain = "" 
Me.process1.StartInfo.LoadUserProfile = False 
Me.process1.StartInfo.Password = Nothing 
Me.process1.StartInfo.StandardErrorEncoding = Nothing 
Me.process1.StartInfo.StandardOutputEncoding = Nothing 
Me.process1.StartInfo.UserName = "" 
Me.process1.SynchronizingObject = Me

Typically, this property is set when the component is placed inside a control or form, because those components are bound to a specific thread.

   Private button1 As MyButton
   Private Sub button1_Click(sender As Object, e As EventArgs)
      Dim myProcess As New Process()
      Dim myProcessStartInfo As New ProcessStartInfo("mspaint")
      myProcess.StartInfo = myProcessStartInfo
      myProcess.Start()
      AddHandler myProcess.Exited, AddressOf MyProcessExited
      ' Set 'EnableRaisingEvents' to true, to raise 'Exited' event when process is terminated.
      myProcess.EnableRaisingEvents = True 
      ' Set method handling the exited event to be called  ; 
      ' on the same thread on which MyButton was created.
      myProcess.SynchronizingObject = button1
      MessageBox.Show("Waiting for the process 'mspaint' to exit....")
      myProcess.WaitForExit()
      myProcess.Close()
   End Sub 'button1_Click
   Private Sub MyProcessExited(source As Object, e As EventArgs)
      MessageBox.Show("The process has exited.")
   End Sub 'MyProcessExited
End Class 'Form1

Public Class MyButton
   Inherits Button

End Class 'MyButton

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

  • LinkDemand 

    for full trust for the immediate caller. This member cannot be used by partially trusted code.

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft