ProcessMonitor.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / ProcessMonitor.cs / 1 / ProcessMonitor.cs

                            namespace Microsoft.InfoCards 
{
    using System;
    using System.ComponentModel;
    using System.Collections.Generic; 
    using System.Diagnostics;
    using System.Runtime.InteropServices; 
 
    internal class ProcessMonitor
    { 
        static ProcessMonitor s_current = new ProcessMonitor();

        Dictionary m_cache;
        object m_sync; 

        private ProcessMonitor() 
        { 
            m_sync = new object();
            m_cache = new Dictionary(); 
        }

        public static Process GetProcessById( int id )
        { 
            return s_current.InnerGetProcessById( id );
        } 
 
        Process InnerGetProcessById( int id )
        { 
            Process process = null;
            lock( m_sync )
            {
                if( !m_cache.TryGetValue( id, out process ) ) 
                {
                    process = Process.GetProcessById( id ); 
                    if( !process.HasExited ) 
                    {
                        InitializeProcessObject( process ); 

                        //
                        // add the entry to the cache.
                        // 
                        m_cache.Add( process.Id, process );
                    } 
                } 
            }
            return process; 
        }
        void InitializeProcessObject( Process process )
        {
            // 
            // This call can create a thread when setting the value to true.
            // 
            process.EnableRaisingEvents  = true; 
            process.Exited += new EventHandler( Process_Exited );
        } 
        void Process_Exited( object sender, EventArgs e )
        {
            Process process = (Process)sender;
            lock( m_sync ) 
            {
                m_cache.Remove( process.Id ); 
            } 
            process.Exited -= new EventHandler( Process_Exited );
        } 
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK