Click here to Skip to main content
15,881,424 members
Articles / Programming Languages / C#
Article

WinForms lock detector

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
5 Apr 2008CPOL 23.3K   456   16  
A nice and pretty simple C# class to detect if a GUI thread can not process window messages (and user actions).

lockdetector_bin

Introduction

If your application performs long operations sometimes and you do not want to spend time writing specialized code to show an indicator in every such place, then this class might help you.

Background

The idea is very simple. User actions such as keyboard and mouse events are just window messages. So, we can assume that your application is locked (processing a long operation) when your GUI thread (main thread, in most cases) can not process window messages.

The LockDetector class periodically calls BeginInvoke on some control from the target thread to send a window message. Then, if the delegate has not been called during a specified timeout interval, the OnLockDetected event is called in the detector thread and then can be processed in parallel with the thread being monitored.

Using the code

Check this very short example of how to use the class:

C#
private LockDetector detector;
private void TestForm_Load(object sender, EventArgs e)
{
    detector = new LockDetector(this, 300); // detection timeout - 300ms
    detector.OnLockDetected += new 
      LockDetector.onLockDetectedDelegate(detector_OnLockDetected);
    detector.OnLockFinished += new 
      LockDetector.onLockFinishedDelegate(detector_OnLockFinished);
    detector.Start();
}

private void TestForm_FormClosing(object sender, FormClosingEventArgs e)
{
    detector.Dispose();
    detector = null;
}

void detector_OnLockFinished()
{
    MessageBox.Show("FINISHED");
}

void detector_OnLockDetected()
{
    MessageBox.Show("DETECTED");
}

private void button1_Click(object sender, EventArgs e)
{
    Thread.Sleep(5000);
}

The sources include a more advanced example.

History

  • 06 Apr 2008 - Initial release.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Netherlands Netherlands
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
-- There are no messages in this forum --