using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Threading;
public class MutexForm : System.Windows.Forms.Form
{
private Mutex m = new Mutex( false, "WinMutex" );
private bool bHaveMutex = false;
public MutexForm()
{
Thread T = new Thread( new ThreadStart( ThreadProc ) );
T.Start( );
}
protected override void OnPaint( PaintEventArgs e ) {
if( this.bHaveMutex )
DrawCircle( System.Drawing.Color.Green );
else
DrawCircle( System.Drawing.Color.Red );
}
protected void DrawCircle( System.Drawing.Color color ) {
using(Brush b = new SolidBrush( color )){
using(Graphics g = this.CreateGraphics( )){
g.FillEllipse( b, 0, 0, this.ClientSize.Width, this.ClientSize.Height );
}}
}
protected void ThreadProc( ) {
while( true ) {
m.WaitOne( );
bHaveMutex = true;
Invalidate( );
Update( );
Thread.Sleep( 1000 );
m.ReleaseMutex( );
bHaveMutex = false;
Invalidate( );
Update( );
}
}
[STAThread]
static void Main()
{
Application.Run(new MutexForm());
}
}